1

Тема: CMS з багатомовністю

Всім привіт
Допоможіть з багатомовністю. Цікавить не CMS з багатомовністю а те як вона реалізована. Зараз нагаюсь зробити ukrcms багатомовною

Як краще робити виклики:

$post->getTitle();

$post->getTitle('en');

$post->title;

$post->en->title;

$post->en()->title;

Чи ще якось =)

На даному етапі одномовності виклики ідуть так: $post->title;

;)

2

Re: CMS з багатомовністю

нооооуууу.
треба десь конфігурувати, а не звертатия до метода

3

Re: CMS з багатомовністю

Це ясно а от якщо на сторінці необхідно буде вивести заголовок з іншої мови ?:)

4

Re: CMS з багатомовністю

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

Подякували: koala1

5 Востаннє редагувалося koala (27.05.2013 19:31:26)

Re: CMS з багатомовністю

Абстрактно - переклади мають зберігатися в окремому файлі (чи файлах) локалізації (1), а в коді згадка про мову має бути максимум один раз(2), на початку, а тому:

$post->title;

Має за логікою бути визначеним в класі, тобто кожен клас міститиме всі переклади - порушує (1)

$post->getTitle('en');
$post->en->title;
$post->en()->title;

Сотня згадок про одну мову в коді, порушено (2)

Так що з названих

$post->getTitle();

Можу ще рекомендувати таке. Є:
- глобальна змінна (чи функція, що повертає) - поточна мова.
- глобальний асоціативний масив перекладів (на кшталт translations["en"]["Заголовок"]="Title" і т.д.)
- функція, що повертає потрібний рядок, із простим іменем, наприклад _().
Тоді
_("Заголовок") підставить "Title" чи "Заглавие" залежно від поточного перекладу (чи фолбек).

6

Re: CMS з багатомовністю

в уіі добре зроблено

7

Re: CMS з багатомовністю

Отже сформулюю проблему конкретніше:)

Є сайт. Має бути багатомовний. Клас Мов містить поточну мову для прикладу Lang::getId();
На сайті є локалізація - тобто _t('Заголовок') на різних сайтах (site.com/en | site.com/ru) буде віповідно повертати різний результат. де зберігати ці тексти це не проблема
 
Проблема в моделях. Тобто текст пишуть менеджери або ще хтось в адмінці. По дефолту $post->title поверне заголовок на поточній локалі. Російська чи українська це уже система сама визначить
А от коли такий випадок: поточна мова російська а необхідно вивести текст на українській як називати метод і як він має працювати =)

$post->getTitle('ru')  ось так ?

Як до речі в Yii зроблено ?:)

8

Re: CMS з багатомовністю

У CodeIgniter є можливість вантажити локалі динамічно. Десь як

$this->lang->load('filename', 'language');
$this->lang->line('language_key');

Враховуючи побудову моделі MVC, виклик методу контролера з параметром коду мови - варіант.

9

Re: CMS з багатомовністю

прошу врахувати неприємну "фічу" opencart - у них нема природньої можливості будувати URL в залежності від обраної мови.
в результаті,  при багатомовному сайті індексується тільки default language! ;(
тобто , треба дати можливість (або й не запитувати про бажання) відображати обрану мову в URL.

10

Re: CMS з багатомовністю

ping написав:

прошу врахувати неприємну "фічу" opencart - у них нема природньої можливості будувати URL в залежності від обраної мови.
в результаті,  при багатомовному сайті індексується тільки default language! ;(
тобто , треба дати можливість (або й не запитувати про бажання) відображати обрану мову в URL.

Звісно врахую. Як на мене це безглуздо тільки 1на мова :)
Фактично є 3 варіанти найменувань.
1. Піддомени. На головному домені головна мова знаходиться і є редірект з uk.ukrcms.com -> ukrcms.com
приклади: en.ukrcms.com, ru.ukrcms.com

2. На одному домені але позначка мови є в урл. Для головної мови позначки немає і теж є редірект
приклад: ukrcms.com/en/  ukrcms.com/ru/

3. На кожну мову свій домен
ukrcms.ru
ukrcms.com
ukrcms.com.ua

Пам'ятаю на форумі просили тудушку,  ось що я планую реалізувати по багатомовності =)