PHPでローカリゼーション(多言語化)に対応する
PHPアプリケーションでローカリゼーション(多言語化)に対応できるライブラリ
はじめに
アプリケーションで, 特定の国のユーザを対象とするときは, 一つの言語で問題ありませんが, 複数の国を対象とするときは, アプリケーションで使用している言語を切り替える仕組みが必要です.
本稿では, PHPアプリケーションでローカリゼーションに対応できるライブラリを紹介します.
このライブラリは, 言語パックをファイルごとに分けられるため, すべての言語パックを読み込まず, メモリを節約し不要なファイルの読み込みを行いません.
使い方
言語パックの用意
Localesフォルダ内に対応したいロケール名のフォルダを作成します. 例で, 日本語に対応してみましょう. 日本語のロケール名をjaとします.
- Locales
- ja
jaフォルダ内にja.jsonを用意し, 内部に以下を書き込みます.
- Locales
- ja
- ja.json
- ja
{
"languageName": "Japanese",
"localizedLanguageName": "日本語"
}
翻訳が書かれた言語パックtranslations.core.jsonを用意します.
- Locales
- ja
- ja.json
- translations.core.json
- ja
言語パックtranslations.core.json内に, keyと翻訳内容のセットを並べていきます.
{
"clear": "消去",
"login": "ログイン",
"logout": "ログアウト",
"title": "タイトル",
"tags": "タグ",
"ncontents": "{0}件のコンテンツ"
}
基本は以上ですが, 言語パックを分けたい時は, translations.{namespace}.jsonで分けていきます. 例えば, 名前空間setupの場合は, translations.setup.jsonを用意し, 翻訳内容を書き込みます.
- Locales
- ja
- ja.json
- translations.core.json
- translations.setup.json
- ja
{
"setup": "セットアップ",
}
ローカライズの方法
Localization.phpを読み込みます.
require_once('/Localization.php');
ロケールを設定します.
Localization\SetLocale('ja');
ローカライズします.
Localization\Localize('login', 'login');
// 上の言語パックの場合これは, "ログイン"が出力されます.
// ロケールが設定されていない, 翻訳keyが見つからない場合は, "logout"が返ります.
翻訳内容内に{n}がある場合は, Localize()の第三引数以降が代入されていきます.
Localization\Localize('ncontents', '{0} contents', 2);
// この結果は, "2件のコンテンツ"です.
ある名前空間にあるkeyの指定は, {namespace.key}で指定します.
Localization\Localize('setup.setup', 'Setup');
// この結果は, "セットアップ"です.
ダウンロード
https://github.com/ContentsViewer/ContentsPlanet/blob/master/Module/Localization.php
Localizationは, ContentsPlanet(コンテンツ管理システム) に導入され, メンテナンスは ContentsPlanet プロジェクト内で行われることになりました.