Làm thế nào để xuất các thiết lập biến dịch trong mã?


7

Trong một mô-đun tùy chỉnh, tôi xác định một số biến cấu hình bằng cách triển khai API của mô-đun biến . Mô-đun này là một phần của dự án trang đa ngôn ngữ, vì vậy một số biến này có thể dịch được.

Trong hook_variable_info()triển khai của tôi , các biến này được định nghĩa như 'localize' => TRUEvậy để chúng có sẵn trong cài đặt Đa ngôn ngữ> Giao diện biến được cung cấp bởi mô-đun dịch Biến (một phần của Quốc tế hóa ). Nhưng trạng thái mặc định của họ là không được dịch. Vì vậy, để dịch biến, người quản trị trang cần truy cập trang và chọn biến của mô-đun của tôi.

Tôi cần các biến tùy chỉnh của tôi được dịch tự động khi mô-đun được cài đặt.

Mô-đun đã sử dụng Tính năng để xuất cấu hình khác, vì vậy một giải pháp dựa trên Tính năng sẽ rất hay. Nhưng nó có thể hoàn toàn dựa trên mã.


+1 Cho câu hỏi thú vị. Tôi thậm chí không biết về mô-đun đó trước đây! Nó mới ở D7.
barista nghiệp dư

Câu trả lời:


4

Cập nhật : Với phiên bản gần đây của mô-đun dịch Biến (tức là 7.x-1.7), danh sách các biến được dịch được lưu trữ bởi bộ điều khiển language lĩnh vực biến trong listbiến của nó . Đoạn mã sau trình bày cách sử dụng bộ điều khiển cảnh giới để đặt các biến được dịch từ hook_enable()triển khai mô-đun .

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));
}

Cập nhật : Đây không phải là cách để làm điều đó, trừ khi bạn đang sử dụng một phiên bản cũ của mô-đun dịch Biến (<7.x-1.7)

Tên của các biến được dịch được lưu trữ trong i18n_variable_confbiến. Biến này tự nó không thể được xuất bằng Strongarm (hoặc giải pháp tương tự). Tôi đã kết thúc bằng một thủ thuật cũ: kiểm tra biến trong hook_inittriển khai và thiết lập nó nếu cần. Mảng trong bộ điều khiển foreach chứa tên của các biến được dịch.

/**
 * 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);
  }
}

So với một giải pháp dựa trên tính năng, điều này thực thi các cài đặt cho các biến được định cấu hình và sẽ hủy mọi chỉnh sửa thủ công. Điều này có thể muốn hoặc không muốn. Trong trường hợp của tôi, nó đã được.

Vấn đề duy nhất của tôi với giải pháp này là nó có một số chi phí cho mỗi yêu cầu.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.