web-dev-qa-db-ja.com

i18n変数を使用した多言語設定フォーム

モジュールの設定フォームを使用していて、一部のフィールドを多言語にしようとしています。

多言語変数をhook_variable_variable_infoで宣言しました(およびカスタムグループのhook_variable_group_infoで)。

function MYMODULE_variable_info() {
  $variable['my_variable_name'] = array(
    'type' => 'string',
    'title' => t('My title'),
    'default' => MY_DEFAULT_VALUE,
    'description' => t('My description.'),
    'localize' => TRUE,
    'group' => 'my_group'
  );

  return $variable;
}

設定フォームを追加しました(たとえば1つのフィールド)

function MYMODULE_settings_form() {
  $form = array();

  $form['my_variable_name'] = array(
    '#type' => 'textfield',
    '#title' => t('My title'),
    '#title_display' => 'before',
    '#default_value' => variable_get_value('my_variable_name'),
  );

  return system_settings_form($form); 
}

ご覧のとおり、system_settings_form($ form)を使用してフォームフィールドを変数として保存しています。
「admin/config/regional/i18n/variable」で新しい変数を確認しましたが、フォームは多言語フォームと多言語フィールドであることを示していますが、別の言語に切り替えると、値が異なります '保存しました。 (英語版のみがすべての言語の値を保存および変更します)

ありがとう。

2
rreiss

それがまったく最良の解決策かどうかはわかりませんが、1つの方法は、urlパラメータからlangcodeを取得することです。

$langcode = !empty($_GET['variable_realm_key_language']) ? $_GET['variable_realm_key_language'] : $GLOBALS['language']->language;

次に、2番目のパラメーターとして$ langcodeを使用してi18n_variable_get()を使用できます。

1
marcoscano

ページタイトルモジュールを使用して入力されたテキストの翻訳可能な文字列を作成する必要があり、次のコードを使用して変数を作成しました

function module_variable_info($options) {
    $variables['page_title_type_news_and_event'] = array(
    'type' => 'text',
    'title' => t('Page title CT New Events', array(), $options),
    'default' => '',
    'description' => t('Module : Page title', array(), $options),
  );

  return $variables;
}

admin/config/regional/i18n/variableにある他のタブでそれらを見ることができ、そこでチェックボックスを有効にしました

enter image description here

次に、文字列をadmin/config/system/variableおよびothers tabで翻訳します。

enter image description here

3
Pravin Ajaaz