Drupal - Габор Чойси
Тази част ще бъде за разработчици. В него искам да говоря за някои от функциите на Drupal 7, които можете да използвате, когато разработвате вашите модули. По-рано говорихме за контекстна поддръжка и нови опции за избор на език, сега искам да дам някои съвети как да ги използвам правилно и да споделя своя измамен лист за Drupal 6 и 7.
Контекстна поддръжка
Говорих за контекста в първата част, но ето как може да бъде написан в код:
Просто, нали? Както беше посочено по-рано, контекстът трябва да се използва за предаване на значение. Има няколко контекста в ядрото на Drupal и ние продължаваме да обсъждаме техните имена. За да видите контекстите, които разработчиците използват, можете да се присъедините към тестовата група на localize.drupal.org и да ги видите, докато превеждате в раздела Превод. Можете да използвате филтри, за да покажете редове, използващи тези контексти, и да видите кои модули ги използват.
Когато избирате контекст, подходете внимателно към този въпрос и погледнете списъка със съществуващи контексти. Ако не сте сигурни, попитайте преводачите.
Понастоящем контекстите не се поддържат еднакво от различни API функции. API на javascript не получи поддръжка за контексти в Drupal 7, така че контекстите не работят в javascript. Все още можете да работите с javascripts по стария начин, за да ги превеждате чрез функцията t() и да ги добавяте към страници, като използвате drupal_add_js(. array('type' => 'setting')), за да работите с тях. Това изглежда грозно, но работи добре:
Друга магическа част от системата за локализация са заглавията и описанията на елементите от менюто в кода. Тук можете да използвате ключа title_arguments, за да извикате аргументитеза функцията, извикваща заглавката (която е зададена по подразбиране чрез t()). По различни причини това не работи с инструмента за извличане на шаблони за превод, така че ви предлагам да зададете вашия title_callback и вашия контекст така:
Функцията watchdog() е напълно зависима от Drupal 6 API, така че може да се използва за превод на низове, които са получени чрез функцията t(), но не позволява работа с контексти. Тъй като записите в дневника са само на английски, не се работи в тази насока. Но съобщенията в регистрационния файл са най-малко вероятното място за среща с контекст и където е необходим контекст.
Низовете в .info файлове имат подобна съдба. Текст от заглавието и описанието на проекта може да бъде преведен, но не може да бъде определен контекст за този текст. Възможно е в някои случаи имената на модулите да изискват контекст, но за съжаление в Drupal 7 той не може да бъде инсталиран.
Преглед на кода
Ако не използвате модула Coder, тогава или знаете много добре правилата за кодиране, или трябва да се запознаете по-добре с този много добър инструмент. Този модул ви позволява да прегледате кода и да откриете грешките, които сте направили, докато сте използвали Drupal API. Въпреки че има вградена поддръжка за проверка на API за локализация, по-добре е да направите действителната проверка. Също така инсталирайте Translation Template Extractor, който се използва за обработка на Drupal модули и текстовите низове, които съдържат.
Ако нещо може да ви каже за някои грешки при използването на API, тогава манипулаторът може да каже всичко това сам. Когато се интегрира с модула Coder, вие ще можете да видите всички предупреждения, получени по време на обработката на кода, което ще ви помогне да използвате API за локализация по-добре.
Детски легла отлокализация
И така, сега мамятният лист е подреден по-удобно, актуализиран и вече има два от тях. Направих два варианта, за да може който се интересува да види разликите в тях. Грабнете ги докато са пресни! По-долу можете да видите техните екранни снимки, а самите измамни листове са приложени към този документ.


По-гъвкава обработка на езика
Drupal 6 познава само около един език на страница (който се определя от глобалната променлива $language), а също така има малък набор от алгоритми за избор на език. Когато е избран език, другите модули разчитат на тази стойност, за да показват съдържание или интерфейс на този език.
Drupal 7 използва различен подход и работи с езици на ново ниво, което може да се нарече езикови типове. Езикът на интерфейса е само един от типовете, а ядрото изпълнява два други типа: език на документа и език на URL. Въпреки че езикът на документа и езикът на URL не могат да бъдат конфигурирани в ядрото, тези типове се използват от Field API и функцията l(). Тези вградени типове са дефинирани във функцията locale_language_types_info(), която е реализация на функцията hook_language_types_info(), която всеки модул може да използва за определяне на други езикови типове. Drupal дефинира глобална езикова променлива за всеки тип с помощта на функцията drupal_language_initialize().
Може дори да е по-удобно да използвате функцията hook_language_types_info_alter(), която ви позволява да промените типа език, за да позволите интерфейсът да бъде зададен на езика на документа или да направите езика на интерфейса фиксиран.
Това не са всички функции на новия API за локализация, но това са основните нови компоненти. Подробна информация може да бъде намерена във файла modules/locale/locale.api.php.
Допълнително
Вижте други статии от поредицата „Габор Хойци – Многоезичието в Drupal 7“: