# アドオンの言語変数

{% hint style="info" %}
HINT

言語変数とその使用方法についてはこちらをご覧ください
{% endhint %}

言語変数を使用すると、CS-Cartのアドオンの翻訳（多言語化）を行うことが出来ます。\
CS-Cartでは言語のテキストは、PHPコードやSmartyテンプレートファイルに直接記述されていません。言語を表示する際には特別な関数が呼び出されます。言語変数の名前が関数に渡され、ユーザーの環境に応じた言語でテキストが返されます。

アドオンの言語変数はPOファイルに保存されています。\
POファイルは言語ごとに別々のフォルダにあります：`var/langs/[言語コード]/addons/[アドオン名].po`

たとえば、「アクセス制御」アドオンの英語翻訳のPOファイルは`var/langs/en/addons/access_restrictions.po`にあります。

POファイルのファイル名は、`app/addons/<アドオン名>`にある`addon.xml`の`id`セクションの内容と同じでなければなりません。

この記事では、アドオンのインストール、アンインストール、またはアップグレードの際に言語変数がどのように処理されるかについて説明します。

## アドオンのインストール時

アドオンがインストールされると、そのPOファイルが分析されます。\
使用可能なすべての言語の言語変数の値がlanguage\_valuesテーブルに書き込まれます。\
このテーブルは次のフィールドで構成されています。

* `lang_code` —言語コード
* `name` —プレフィックスなしの言語変数の名前
* `value` —指定された言語コードの言語変数の値

POファイルの値も`original_values`テーブルに入れられます。\
構造は次のとおりです。

* `msgctxt` — POファイルの`msgctxt`と同様に、プレフィックス付きの言語変数の名前。
* `msgid` — POファイルの`msgid`と同様に、翻訳元の言語変数の値（原則として英語）。

## アドオンの使用時

言語変数が初めて`__`関数で使用されるとき、その値は`language_values`テーブルから取得され、キャッシュされます。以降、値はキャッシュから取得されます。言語変数は、CS-Cartの汎用キャッシュの一部です。キャッシングメカニズムは、CS-Cartの設定に依存します。

管理者は、管理パネルで言語変数の値を変更できます。これらの変更は、`language_values`テーブルの値フィールドに記録されますが、`original_values`テーブルは変更されません。

言語変数を管理パネルからのPOファイルにエクスポートする場合、`msgtxt`と`MSGID`の値は`original_values`から、`msgStr`の値は`language_values`から取得されてエクスポートされます。

## アドオンのアップグレード時

アドオンがアップグレードされると、アップグレードパッケージ内のPOファイルが分析されます。新しい言語変数は追加されますが、既存の言語変数は更新されません。これは、CS-Cart自体のアップグレードの際にも適用されます。

アドオンのアップグレードパッケージの作成についての詳細についてはこちらをご覧ください。

## アドオンのアンインストール時

アドオンがアンインストールされると、POファイルが分析されます。アドオンのすべての言語変数が`original_values`と`language_values`がテーブルから削除されます。また、言語キャッシュからも削除されます。
