Localize terms словари, даже в 1.x-dev версии не работает.

Главные вкладки

Аватар пользователя orangeudav orangeudav 15 марта 2010 в 3:50

Сижу, разбираюсь тут, почему же все таки локализация для словарей не работает. Вернее работает но не так, как предполагалось.

Когда для словаря выбран тип Localize term в колонку language таблицы {term_data} ничего не пишется, drupal не знает на каком языке вы пишите термины. Поэтому дальше начинается уличная магия.
Допустим, самый простой случай - отображение taxonomy/term/x

В функции i18ntaxonomy_term_page проверяется тип словаря:

<?php
if (i18ntaxonomy_vocabulary($term->vid) == I18N_TAXONOMY_LOCALIZE) {
        
$names[] = i18nstrings("taxonomy:term:$term->tid:name"$term->name);
      }
      else {
        
$names[] = $term->name;
      }
?>

Смотрим i18nstrings :

<?php
function i18nstrings($name$string$langcode NULL) {
  global 
$language;
  
$langcode $langcode $langcode $language->language;
  
  
// If language is default, just return
  
if (language_default('language') == $langcode) {
    return 
$string;
  }
  else {
    return 
i18nstrings_translate_string($name$string$langcode);
  }
}
?>

то есть зачем-то текущий язык сравнивают с языком по умолчанию, наверное предполагают что термины были забиты на языке по умолчанию. В итоге, если я ставлю для сайта язык по умолчанию ru (а я должен иметь возможность поменять его в любой момент) и текущий язык у меня ru то перевод термина не происходит.

НО! вроде бы принято, что в t() подсовываются всегда английские строки (так что все термины у меня забиты по-английски), а дальше уже они переводятся во что угодно? А i18n пытается сломать эту традицию?

И ведь этот i18nstrings вызывается многих мест, так что трогать его нельзя Sad Наверное для таксономии придется делать альтернативную функцию.

Я понимаю, что большинство людей, видя такое бардак, просто заводят на каждый язык по словарю, потом вешают на каждую ноду по несколько терминов и так далее. Но ведь это не выход.

Комментарии

Аватар пользователя orangeudav orangeudav 18 июня 2010 в 0:55

все словари которые нужно переводить вбивать вначале на английском языке в английском интерфейсе. дальше какие угодно переводы для отдельных терминов штатными средствами локализации интерфейса

Аватар пользователя Puzzle Puzzle 3 марта 2011 в 15:03

Включил английский по умолчанию, переключился на английский интерфейс, создал новый словарь с опцией "Localize terms. Terms are common for all languages, but their name and description may be localized." Забил в него несколько терминов латиницей, перевел текстовые группы term:tid:name и vocabulary:vid:name сделал апдейт и рефреш через /en/admin/build/translate/refresh

Далее иду на страницу создания материала, привязанного к данному словарю, и переключение интерфейса никак не влияет на название словаря и содержимое выпадающего списка...

Что я делаю не так?

Аватар пользователя Puzzle Puzzle 3 марта 2011 в 15:26

Правды ради стоит сказать, что на странице созданной ноды, также как и на странице термина по разным адресам ru/taxonomy/term/277 и en/taxonomy/term/277 термин переводится.

Аватар пользователя Puzzle Puzzle 3 марта 2011 в 23:25

Получилось!
Заменил простую привязку к словарю на Content Taxonomy Field CCK. Возможно и простой виджет будет работать, но я использовал Hierarhical Select.