カスタムモジュールで、 Variable モジュールのAPIを実装することにより、いくつかの構成変数を定義します。モジュールは多言語サイトプロジェクトの一部であるため、これらの変数の一部は翻訳可能である必要があります。
私のhook_variable_info()
実装では、これらの変数は'localize' => TRUE
そのため、変数変換モジュール( 国際化 の一部)が提供する多言語設定>変数インターフェースで使用できます。ただし、デフォルトの状態は翻訳されません。したがって、変数を翻訳するには、サイト管理者がページにアクセスして、モジュールの変数を選択する必要があります。
モジュールのインストール時にカスタム変数を自動的に翻訳する必要があります。
モジュールはすでに他の構成をエクスポートするために機能を使用しているので、機能に基づくソリューションは素晴らしいでしょう。しかし、それは純粋にコードベースにすることができます。
pdate:変数変換モジュールの最新バージョン(つまり7.x-1.7)では、変換された変数のリストはlanguage
変数レルムコントローラのlist
変数。次のコードは、レルムコントローラーを使用して、モジュールhook_enable()
実装から変換された変数を設定する方法を示しています。
function MODULE_enable() {
// Get the language variable controller.
$controller = variable_realm_controller('language');
// The list of translatable variables.
$translatable_variables = $controller->getEnabledVariables();
// The list of variables that could be translated.
$available_variables = $controller->getAvailableVariables();
// Add our variables to $translatable_variables.
foreach ($available_variables as $name) {
// Translate user mail messages.
if (preg_match('/^user_mail_[a-zA-Z_\[\]]*\[mail_part\]$/', $name)) {
$translatable_variables[] = $name;
}
}
$translatable_variables = array_merge($translatable_variables, array(
'user_registration_help',
'user_picture_guidelines',
'maintenance_mode_message',
'menu_main_links_source',
'menu_secondary_links_source',
));
// Save the updated list of translatable variables.
$controller->setRealmVariable('list', array_unique($translatable_variables));
}
pdate:これは、古いバージョンの変数変換モジュール(<7.x-1.7)を使用している場合を除いて、行う方法ではありません。
翻訳された変数の名前はi18n_variable_conf
変数に格納されます。この変数自体は、Strongarm(または同様のソリューション)を使用してエクスポートできません。私は古いトリックの使用を終了しました:hook_init
実装で変数をチェックし、必要に応じて設定します。 foreachコントローラの配列には、翻訳される変数の名前が含まれています。
/**
* Implements hook_init();
*/
function MODULE_init() {
$i18n_variable_conf = variable_get('i18n_variable_conf', array());
$i18n_variable_conf_updated = FALSE;
foreach(array(...) as $name) {
if (!in_array($name, $i18n_variable_conf)) {
$i18n_variable_conf[] = $name;
$i18n_variable_conf_updated = TRUE;
}
}
if ($i18n_variable_conf_updated) {
variable_set('i18n_variable_conf', $i18n_variable_conf);
variable_set('i18n_variable_list', variable_children($i18n_variable_conf));
cache_clear_all('*', I18N_VARIABLE_CACHE, TRUE);
}
}
機能ベースのソリューションと比較して、これは構成された変数の設定を適用し、手動編集をキャンセルします。これは望まれる場合と望まれない場合があります。私の場合はそうでした。
このソリューションの私の唯一の問題は、各要求にいくらかのオーバーヘッドがあったことです。
機能に基づくソリューションは strongarm である必要があります。ただし、その機能は(まだ)存在しません http://drupal.org/node/1086986