フレームの言語でテキストを表示する
ウィジェットをインストールした人 は、フレーム設定でフレームの言語を選べます。ウィジェットの日付や数値は、何もしなくてもその言語で表示されます。また、usePreferredLanguageフックでどの言語が選ばれているかがわかるので、ウィジェット独自の文言もその言語で表示できます。
import { usePreferredLanguage } from "~lib/use-preferred-language";
export const Widget = () => {
const language = usePreferredLanguage();
return <div>{language}</div>;
};
languageは"en"、"fr"、"de"、"it"、"es"、"ja"のいずれかです。自動のままのフレームと、ウィジェットスタジオのプレビューでは"en"になります。
日付と数値
日付と数値については、特に何もする必要はありません。toLocaleDateString、toLocaleString、Intlのフォーマッターで言語を指定しなければ、フレームの言語で表示されます。オプションを渡すときは、言語を指定する位置にundefinedを入れます。
import { useScheduledDate } from "~lib/use-scheduled-date";
export const Widget = () => {
const scheduledDate = useScheduledDate();
return (
<div>
{scheduledDate.toLocaleDateString(undefined, {
weekday: "long",
day: "numeric",
month: "long",
})}
</div>
);
};
"en-GB"のように言語を名指しするのは、どのフレームでもその言語で表示したい場合だけにしましょう。
ウィジェット独自の文言
ウィジェットが表示するテキストごとに翻訳を用意し、翻訳していない言語では英語で表示するようにします。
import { usePreferredLanguage } from "~lib/use-preferred-language";
const GREETINGS: Record<string, string> = {
en: "Good morning",
fr: "Bonjour",
ja: "おはようございます",
};
export const Widget = () => {
const language = usePreferredLanguage();
return <h1>{GREETINGS[language] ?? GREETINGS.en}</h1>;
};