言語ファイルと多言語対応
モジュール・スキン・レイアウトの文言を多言語で提供する方法です。
言語ファイル:lang/ko.php
モジュールの lang/ フォルダーに、言語コードごとの PHP ファイルを置きます(ko.php、en.php、ja.php ...)。
<?php
$lang->mymodule = '내 모듈';
$lang->msg_title_required = '제목을 입력해 주세요.';
// 배열 형식도 가능
$lang->status_names = [
'open' => '진행중',
'closed' => '마감',
];形式に注意:$lang->key = 'value'; の単純な羅列である必要があります。関数定義や複雑なロジックを入れないでください。コアがこのファイルをパース・キャッシュします。
コードで使う
// PHP
$message = lang('mymodule.msg_title_required'); // 모듈 지정
return new \BaseObject(-1, 'mymodule.msg_title_required'); // 오류 메시지로
// 템플릿 v2
{{ $lang->msg_title_required }}
@lang('mymodule.msg_title_required')- 現在のモジュールの言語ファイルは自動で読み込まれます。他のモジュールのものを使うには
moduleName.keyと指定するか、Context::loadLang('modules/moduleName/lang')で読み込みます。 - スキン・レイアウトも自分の
lang/フォルダーを持つことができ、テンプレートで@load('../lang/')によって読み込みます。
XML メタデータの多言語対応
info.xml・skin.xml の名前・説明は、xml:lang 属性で言語ごとに記述します。
<title xml:lang="ko">내 모듈</title>
<title xml:lang="en">My Module</title>
<description xml:lang="ko">설명</description>
<description xml:lang="en">Description</description>ユーザーの言語設定に合うものが表示され、ない場合は既定の言語で代替されます。
ユーザー入力の多言語対応
管理者が入力する文言(掲示板名など)は、多言語入力ウィジェットで言語ごとの値を受け取れます。こうした値は、出力時に Context::replaceUserLang($value) を通すと現在の言語に置き換えられます。
<h2>{{ Context::replaceUserLang($module_info->board_title) }}</h2>推奨事項
- テンプレートに文言をハードコーディングせず、言語キーを使ってください。韓国語専用で始める場合でも
ko.phpをひとつ置いておけば、あとで言語を追加するときはファイルを追加するだけで済みます。 - 言語ファイルにないキーを参照すると、キー名がそのまま表示されます。テンプレートでは
{{ $lang->key ?? 'default text' }}で防げます。 - Zittme のコアは12言語に対応しています。配布用の資料であれば、最低でも ko・en の2種類を推奨します。