SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [uk] [vi] [zh] Espace de traduction

Télécharger

Багатомовність завдяки шаблонам

Juin 2015 — mis à jour le : Décembre 2015

Toutes les versions de cet article :

Інтернаціоналізація, або багатомовність, шаблонів, яка розглядається в цій статті, запроваджена з версії SPIP 1.7.


Навіщо створювати шаблони декількома мовами?

Після того, як документи опублікуються на сайті, SPIP автоматично підлаштовує певну інформацію відповідно до мовних стандартів. Дати відображаються мовою сайту або статті, розділи та форми (такі, як інтерфейс для відправлення повідомлень) встановлюються відповідною мовою... Все це буде автоматично переведено і адаптовано SPIP.

Цього, однак, не достатньо: веб-майстри вписують в свої шаблони певну інформацію, наприклад, тексти для навігації на сайті - текстові елементи, такі як «Карта сайту», «Відповісти на цю статтю», «Того ж автора», «У тій же рубриці»... Для сайту однією мовою досить просто включити ці різні текстові елементи: вони вставляються як текст в HTML код шаблонів. Проблема виникає, коли сайт є багатомовним: у статті французькою ми хочемо відобразити «Répondre à cet article», але в статті англійською нам потрібно вивести інший текст («Comment on this article»).

[SPIP 1.7.2] передбачає три способи управління цими різними текстовими елементами для відображення їх різними мовами:

-  1-й спосіб полягає в збереженні текстових елементи в так званих мовних файлах, які створюються окремо від шаблонів (по одному файлу для кожної мови). Єдиний шаблон (наприклад article.html) викликає текстовий елемент з відповідного мовного файлу. За цим методом шаблон article.html автоматично показує текстовий елемент «Répondre à cet article» або «Comment on this article» залежно від вибраної мови статті. Ми рекомендуємо саме цей метод, оскільки він пропонує велику гнучкість і полегшує процес оновлення сайту (робота ведеться з одним шаблоном, який автоматично управляє кількома мовами). Ці нові функції SPIP полегшили спільну роботу з перекладами. Різномовні адміністратори можуть перекласти інтерфейс сторінки у редакційній зоні сайту без маніпуляцій шаблонами.

-  2-й більш швидкий і технічно простий спосіб полягає у створенні шаблонів для кожної мови. Процедура проста: створіть файл article.html, щоб управляти французькою статтею, і файл article.en.html, щоб управляти статтю англійською мовою. (Примітка: насправді article.html в такому випадку керуватиме всіма мовами, крім англійської). Такий спосіб добре пристосований для швидкої побудови сайту, доки він існує тільки декількома мовами і структура є досить простою. Але ми не рекомендуємо цей метод, якщо сайт використовує багато мов, та/або якщо ви використовуєте кілька шаблонів для однієї рубрики. Крім того, всі переваги цього методу має і Спосіб 3, описаний нижче:

-  3-й спосіб - метод «багатомовниx блоків», який пропонується з [SPIP 1.7.2], однаково добре працює як у змісті, так і в шаблонах. Просто вставте в шаблон наступний код:

і фраза буде з’являтися потрібною мовою [Попередження: якщо Ви використовуєте багатомовний блок в додатковій частині тегу, ви повинні використовувати фігурні дужки {} замість прямих [], щоб вказати код мови. Приклад: [<multi>{fr}Répondre à cet article{en}Comment on this article</multi>(#BALISE)]]. Цей спосіб є дуже гнучким, але він досягає своїх меж, як тільки кількість мов стає значною, і в такому випадку різні перекладачі, які працюють на сайті, змушені будуть втручатися в шаблон, чого дозволяє уникнути спосіб мовних файлів.

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

1. Мовні файли

Принцип мовних файлів полягає в тому, що в шаблон вставляється код, який звертається до текстового елементу. Таким чином, ви додаєте в одному шаблоні код, що відповідає певному елементу тексту («рядку»), а його значення залежить від обраної мови. Код не змінюється, але текст елемента буде перекладений.

Наприклад, ви можете вирішити, що код download відповідає наступним рядкам:
-  німецькою: «Datei downloaden»,
-  англійською: «download this file»,
-  іспанською: «descargar este archivo»,
-  і т.д.

Тоді достатньо в шаблоні статті article.html (один шаблон підходитиме до всіх мов) вставити наступний код (зверніть увагу на синтаксис):

щоб на сайті з’явився переклад відповідних рядків обраною мовою.

Ще один приклад. У шаблоні article.html ми додаємо цикл (boucle), який відображає всі документи, що додані до статті:

Якщо стаття буде німецькою, ви побачите:

<a href="/IMG/jpg/meinDokument.jpg">Datei downloaden</a>

Якщо статтю буде англійською:

<a href="/IMG/jpg/meinDokument.jpg">download this file</a>

і так далі. Один шаблон з тим самим кодом відображає переклад тексту відповідною мовою сторінки.

-  Використовуйте вже перекладені тексти

Для полегшення роботи веб-майстрів SPIP пропонує ряд вже перекладених рядків (переклади виконані перекладачами SPIP). Завдяки цим рядкам веб-майстер може швидко і легко створити інтерфейс, що буде функціонувати декількома мовами відразу, навіть якщо він не володіє мовою. Усі попередньо переведені текстові елементи зазвичай зустрічаються на сторінках.

Приклад: веб-майстер створив інтерфейс англійською і хоче зробити французькою та німецькою. Але він не володіє ані французькою, ані німецькою. Єдине, що він має зробити, це змінити код в шаблонах (як це описано вище, ви можете просто скопіювати фрагмент коду, додавати та змінювати його), і йому не доведеться турбуватися про те, де він міг би отримати переклад. Робота з перекладу вже виконана перекладачами SPIP.

Якщо на той самий сайт пізніше буде додано нову мову, наприклад польську, статті польською будуть відображатися вже з відповідними текстовими елементами (навігації, дати і таке інше) без жодних зусиль з боку веб-майстра.

Ще одна перевага цього методу: він полегшує створення шаблонів, які будуть відображатися відразу на декількома мовами. Шаблон, який був створений за допомогою цього методу, автоматично перекладається всіма мовами SPIP.

Вже перекладені рядки в стандартній комплектації поставляються з SPIP. Технічно кажучи, рядки зберігаються в мовних файлах. Для «загальної» частини:
— /ecrire/lang/public_de.php містить рядки німецькою,
— /ecrire/lang/public_fr.php містить рядки французькою,
— /ecrire/lang/public_en.php містить рядки англійською,
— /ecrire/lang/public_uk.php містить рядки українською
— і т.д.


-  Створюйте свій власний код

Крім того, можна створити свій власний код для тих текстових рядків, які ви хотіли б додати. Це означає, що треба створити індивідуальні мовні файли за моделлю файлу public.... Ці власні файли треба розмістити в папці /ecrire/lang і назвати:
— local_de.php для німецьких рядків,
— local_en.php для англійських рядків,
— ...

Наприклад, можна створити такі рядки німецькою:
— Download, щоб показувати «Die aktuelle Version downloaden»;
— Neues, щоб показувати «Neueste Modifikationen».

За цим методом ми додамо наступний код в шаблони: <:Download:> і <:Neues:>. Відображатися це буде відповідно до перекладів, визначених у файлі local_...php.

Слід зазначити, що кодове ім’я може бути визначено цілком довільно: ви можете вибрати його самі. Ми рекомендуємо вибрати такі кодові імена, які можна легко запам’ятати (а не числа). Як це прийнято в програмуванні, використовуйте лише букви латинського алфавіту без акцентів...

Зміни Починаючи з версії 3.0 SPIP ці функції широко розвинуті і поліпшені.

  • підтримується перезавантаження local_xx.php;
  • перезавантажений мовний модуль тепер може містити лише ті мовні коди, що потрібні для редагування.

Таким чином, шаблон або плагін можуть бути орієнтовані на один або кілька додаткових мовних кодів перезавантаження, не обов’язково перекладати всі мовні коди модуля.

Порядок перезавантаження: заміна значень мовних кодів здійснюється послідовно в такому порядку, зворотним «шляхом»:

  1. мовні файли в директорії ecrire/lang/ можуть бути перезавантажені файлами з директорії...
  2. prive/lang/, які також можуть бути перезавантажені файлами з директорії...
  3. squelettes-dist/lang/, що можуть бути перезавантажені ...
  4. plugin_A/lang/ можуть бути перезавантажені ...
  5. plugin_B/lang/ - плагін, що залежить від плагіну А - можуть бути перезавантажені ...
  6. squelettes/lang/

Отже плагін B може перевизначити один або кілька мовних кодів плагіну A, якщо В залежить від А. Мовні файли в «squelettes/lang/» перевизначать все.

Важливо: Це має важливе значення для написання ваших шаблонів: перед назвою пункту, який буде перекладатися, іде префікс плагіну, до якого він відноситься, наприклад, той мовний рядок, що перекладатиметься в мовному файлі плагіну «mon_plugin» можна назвати в шаблоні так: <:mon_plugin:ma_traduction:>.

Приклад проекту: Мовний файл «plugins-dist/forum/lang/forum_uk.php» плагіну «forum» містить елемент:  'form_pet_message_commentaire' => 'Повідомлення чи коментар?', Мовний файл «plugins-dist/petitions/lang/petitions_uk.php» плагіну «petitions» містить схожий елемент:  'form_pet_message_commentaire' => 'Повідомлення чи коментар?',

Для перевизначення двох каналів одного й того ж мовного перекладу просто додайте до «squelettes/lang/local_uk.php» код  'form_pet_message_commentaire' => 'мій власний переклад', Аби перезавантажувати переклад лише для плагіну «petitions» просто додайте до «squelettes/lang/petitions_uk.php»  'form_pet_message_commentaire' => 'мій власний переклад лише для петицій', Інші мовні коди плагіну «petitions» залишаться незмінними і тільки переклад цього фрагменту буде змінюватися.

Ця операція дійсна для всіх мовних модулів, як для плагінів, так і для ядра.

Техніка

Мовні файли містять різні переклади коду, який ви будете використовувати. Це PHP файли, кожен з них містить таблицю з кодами і відповідними рядками тією мовою, до якої відноситься файл.

Увага: Імена мовних файлів не повинні містити символу «_» («підкреслення»), за винятком відділення імені файлу від коду мови (de, en, fr, uk...). Наприклад, допустиме ім’я «monperso_fr.php», але не «mon_perso_fr.php».

Мовний файл може містити, наприклад, наступний код:

французька версія (lang/monperso_fr.php) :

  <?php
  $GLOBALS[$GLOBALS['idx_lang']] = array(
    'telechargement' => 'Télécharger la dernière version',
    'quoideneuf' => 'Modifications récentes'
  );
  ?>

каталанська версія (lang/monperso_ca.php) :

  <?php
  $GLOBALS[$GLOBALS['idx_lang']] = array(
    'telechargement' => 'Descarregar la darrera versió',
    'quoideneuf' => 'Modificacions recents'
  );
  ?>

Кожен такий файл має наступну структуру:

  • початок файлу:
  • кінець файлу:
  • частина для програмування перекладу складається з кількох рядків, кожен рядок починається з визначення за такою моделлю:

N.B. Кожне визначення закінчується комою, за винятком останнього рядка.

N.B.2. Текст перекладених рядків має бути HTML-вигляду (акцентовані літери повинні бути перетворені на їх HTML-еквіваленти, наприклад &eacute;).

Щоб передати апостроф в текстовому рядку, треба поставити перед ним анти-косу риску. Наприклад, рядок «Ваше ім’я?» вводиться наступним чином: Ваше ім\'я?.

2. Окремий шаблон для кожної мови

Другий спосіб більше підходить для новачків веб-майстрів. Він полягає в створенні окремого шаблону для кожної мови. Подібним чином створюються різні шаблони для рубрик, аби представляти матеріали з різних рубрик за допомогою різних графічних інтерфейсів.

Уявіть, що ми будуємо сайт англійською (усталена мова), німецькою та українською. Тоді ми створюємо три файли з трьома різними шаблонами:
— article.html для англійської (насправді, для всіх мов, для яких не створено специфічного мовного файлу, див. Примітку нижче),
— article.de.html для німецької,
— article.uk.html для української.

(Примітка: Якщо ми опублікуємо статтю іспанською мовою, оскільки шаблону article.es.html не було створено на нашому сайті, для відображення цієї статті буде використаний шаблон article.html, як усталено.

Важливо: майте на увазі, що в іменах файлів «мовних» шаблонів на кінці додається .lang. На сайті обов’язково повинна існувати «усталена» версія. В нашому прикладі це означає, що, якщо не існує article.html, а файл для англійської називається article.en.html, то німецькі та українські файли будуть ігноруватися.

Ви можете комбінувати назву шаблонів «для рубрик» з мовними позначеннями, беручи до уваги наступне:
— article=8.es.html (шаблон статті іспанською з 8-ї рубрики, але не для підрубрик)
— article=8.html (шаблон для статей 8-ї рубрики, але не для підрубрик),
— article-2.es.html (шаблон для іспанських статей 2-ї рубрики та її підрубрик),
— article-2.html (шаблон для статей 2-ї рубрики та її підрубрик),
— article.es.html (шаблон для іспанських статей)
— article.html (шаблон для статті)
— article-dist.html (стандартний шаблон статті, що поставляється Spip).

Примітка: за деякими винятками, для кожної мови існує стандартний двохбуквений код (ISO norm), наприклад «es» для іспанської. Список є на сайті бібліотеки конгресу США. Для забезпечення максимальної сумісності ви повинні застосовувати двобуквений ISO-код мови («iso 639-1») або, якщо треба визначити точнішу мову в мовній сім’ї, трибуквений ISO-код мови («iso 639-2 T»). Німецька, наприклад, визначається як «de». Але стандарт ISO включає в себе тільки 182 мови, у той час як у світі існує 5000-7000 розмовних мов. Щодо не каталогізованих мов, ви можете звернутися до списку, наданого ethnologue.com. Щоб отримати більш детальну інформацію, приєднуйтесь до списку розсилки spip-trad .
Як спростити собі життя. Один з найпростіших способів структурування, запропонований SPIP для організації багатомовних сайтів, є прив’язати мови безпосередньо до рубрик, а не пов’язувати їх до тієї чи іншої статті. Таким чином, у випадку, коли статті однією мовою зібрані в одній рубриці (або в одному секторі), ви можете просто створити спеціальні шаблони (для певних рубрик) без використання мовних імен.

Таким чином, якщо всі статті іспанською зібрані в рубриці 8 (та її підрубриках), ви можете просто назвати шаблон, адоптований до іспанської, rubrique-8.html, а не rubrique.es.html.

Легко здогадатися, які проблеми можуть виникнути з цим методом:
— файл article-2.html повинен існувати, якщо ми хочемо, щоб article-2.es.html не ігнорувався;
— ми не можемо використовувати article.es.html замість article-2.html, якщо article-2.es.html не існує: вибір рубрики завжди має пріоритет над вибором мови;
— якщо якесь виправлення треба зробити в шаблоні, такі ж виправлення мають бути зроблені в інших версіях;
— вам може знадобитися вставити мовні елементи в шаблони файлів, які відносяться до тієї мови, якою ви не володієте (уявіть, як це - створювати цим методом шаблон в’єтнамською, якщо ви добре володієте арабською і лише трохи французькою...).

Цей метод може бути корисний тільки для швидкого створення не надто складних веб-сторінок кількома різними мовами. Як тільки ваш багатомовний проект стає трохи більш амбітним, рекомендуємо вдатися до методу мовних файлів.

3. Багатомовні блоки

Багатомовні (multi) блоки зі статті Réaliser un site multilingue працюють як в текстах авторів, так і в ключах або шаблонах. Увага, ці блоки змінюють тільки текст, а не Spip цикли!

Цей доступний і ефективний спосіб дозволяє якнайшвидше створити багатомовний сайт. Після того, як ваш сайт стане стабільним, можна подумати про необхідність уточнення шаблонів (для адаптації їх до інших мов або для поширення через contrib, або щоб зробити їх «професійними»), що неодмінно приведе вас до необхідності змінити багатомовні блоки мовними файлами.


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé