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 プロジェクト内で行われることになりました.