翻訳された変数の設定をコードにエクスポートする方法は?


7

カスタムモジュールでは、VariableモジュールのAPIを実装して、いくつかの構成変数を定義します。モジュールは多言語サイトプロジェクトの一部であるため、これらの変数の一部は翻訳可能である必要があります。

私のhook_variable_info()実装では、これらの変数はと同じ'localize' => TRUEように定義されているため、変数翻訳モジュール(国際化の一部)によって提供される[多言語設定]> [変数]インターフェイスで使用できます。ただし、デフォルトの状態は翻訳されません。したがって、変数を翻訳するには、サイト管理者がページにアクセスして、モジュールの変数を選択する必要があります。

モジュールのインストール時にカスタム変数を自動的に翻訳する必要があります。

モジュールはすでに他の構成をエクスポートするために機能を使用しているので、機能に基づくソリューションは素晴らしいでしょう。しかし、それは純粋にコードベースにすることができます。


+1興味深い質問です。以前はそのモジュールについてさえ知りませんでした!D7の新機能です。
アマチュアバリスタ

回答:


4

更新:変数変換モジュールの最新バージョン(例: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);
  }
}

機能ベースのソリューションと比較して、これは構成された変数の設定を適用し、手動編集をキャンセルします。これは、必要な場合と不要な場合があります。私の場合はそうでした。

このソリューションの私の唯一の問題は、各リクエストにいくらかのオーバーヘッドがあったことです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.