更新:変数変換モジュールの最新バージョン(例: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));
}
更新:これは、古いバージョンの変数変換モジュール(<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);
}
}
機能ベースのソリューションと比較して、これは構成された変数の設定を適用し、手動編集をキャンセルします。これは、必要な場合と不要な場合があります。私の場合はそうでした。
このソリューションの私の唯一の問題は、各リクエストにいくらかのオーバーヘッドがあったことです。