Сижу, разбираюсь тут, почему же все таки локализация для словарей не работает. Вернее работает но не так, как предполагалось.
Когда для словаря выбран тип 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 вызывается многих мест, так что трогать его нельзя Наверное для таксономии придется делать альтернативную функцию.
Я понимаю, что большинство людей, видя такое бардак, просто заводят на каждый язык по словарю, потом вешают на каждую ноду по несколько терминов и так далее. Но ведь это не выход.
Комментарии
чем то разрешилось?
бьюсь с таксономией, вьюзами и вторым языком...
все словари которые нужно переводить вбивать вначале на английском языке в английском интерфейсе. дальше какие угодно переводы для отдельных терминов штатными средствами локализации интерфейса
Включил английский по умолчанию, переключился на английский интерфейс, создал новый словарь с опцией "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
Далее иду на страницу создания материала, привязанного к данному словарю, и переключение интерфейса никак не влияет на название словаря и содержимое выпадающего списка...
Что я делаю не так?
Правды ради стоит сказать, что на странице созданной ноды, также как и на странице термина по разным адресам ru/taxonomy/term/277 и en/taxonomy/term/277 термин переводится.
Получилось!
Заменил простую привязку к словарю на Content Taxonomy Field CCK. Возможно и простой виджет будет работать, но я использовал Hierarhical Select.
И что же выводиться при переключении языка на термине таксономии ?