Clerkで多言語に対応してみた(Remix編)
Clerkが提供する多言語対応ライブラリを試してみましたので、使い方などをまとめました。
広告ここから
広告ここまで
目次
Clerkが提供する多言語対応ライブラリを試してみましたので、使い方などをまとめました。この記事ではRemixアプリに導入しています。
ライブラリのインストール
Clerkが多言語対応のライブラリを出していますので、インストールしましょう。
npm i @clerk/localizations
翻訳の辞書的なものが含まれてますので、ClerkApp
のlocalization
へ使いたい言語を渡しましょう。
import { jaJP } from '@clerk/localizations'
...
export default ClerkApp(App, {
localization: jaJP
});
もしClerkProvider
を使っている場合は、localization
に渡します。
<ClerkProvider
clerkState={loaderData.clerkState}
localization={jaJP}
>
<Header />
<div className='py-10'>
{children}
</div>
<Footer />
<ScrollRestoration />
<Scripts />
</ClerkProvider>
言語を切り替える機能を実装する
Clerkが提供するUIの言語を変えてみましょう。今回はURLのパスを見て言語を判定するRemixアプリを例にします。
export const useCurrentLocale = () => {
const { pathname } = useLocation()
const { lang } = useParams()
const currentLocale = useMemo(() => {
if (lang) {
return lang?.includes('en') ? 'en' : 'ja'
}
return pathname.startsWith('/en') ? 'en' : 'ja'
}, [lang,pathname])
return {
currentLocale
}
}
先ほどのHookが返してくる言語を元に、ClerkProvider
のlocalization
に渡す辞書を変更します。
export function Layout({ children }: { children: React.ReactNode }) {
const loaderData = useLoaderData<{ clerkState: any }>();
const { currentLocale } = useCurrentLocale()
return (
<html lang="en" className='h-full bg-gray-100'>
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script
async
src="https://js.stripe.com/v3/pricing-table.js">
</script>
<Meta />
<Links />
</head>
<body>
<ClerkProvider
clerkState={loaderData.clerkState}
localization={currentLocale === 'ja' ? jaJP: enUS }
>
{children}
<ScrollRestoration />
<Scripts />
</ClerkProvider>
</body>
</html>
);
}
これでClerkが提供する認証系の言語をパスベースなどで変更できるようになりました。