Советы по локализациям (подводный камушек)
Привет сообщество!
Веду беларускамоўны проект для ЛС. Естественно делал локализацию. Столкнулся с проблемой, что на сайте не верно склоняются некоторые лэйблы (если использовать другие локализации, да-да). Мной замечены даты и изображения.
К примеру в фотосетах слово «изображение» на русском языке склоняется следующим образом:
На мове это выглядело бы так:
Английском языке:
В словарике russian.php оно выглядит следующим образом:
А в моем словарике belarusian.php выглядело так:
А в коде шаблона оно вот такое вот:
Однако несмотря на мою локализацию сайт почему-то для всех случаев подсасывал одно и то же значение: «выявы». Посмотрите, может у Вас на сайте тоже так? ;)
Находится по адресу: /engine/modules/viewer/plugs/modifier.declension.php
В данном случае нас интересует метод:
По коду можно понять, что в случае локализации для своего языка нужно сделать отдельный метод в котором будут прописаны правила склонений для Вашего языка, к примеру для английского это(обратите внимание на название метода):
Там все просто, если предмет один — бери значение один, если много — то бери значение два:
Вот вам и решение. Всем спасибо, все свободны %)
Веду беларускамоўны проект для ЛС. Естественно делал локализацию. Столкнулся с проблемой, что на сайте не верно склоняются некоторые лэйблы (если использовать другие локализации, да-да). Мной замечены даты и изображения.
К примеру в фотосетах слово «изображение» на русском языке склоняется следующим образом:
1,21,31… изображение
2,3,4; 22,23,24… 32,33,34… изображения
5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 изображений
На мове это выглядело бы так:
1,21,31… выява
2,3,4; 22,23,24… 32,33,34… выявы
5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 выяваў
Английском языке:
1 image
2,3,4,5,… images
В словарике russian.php оно выглядит следующим образом:
'topic_photoset_count_images' => 'изображение;изображения;изображений',
А в моем словарике belarusian.php выглядело так:
'topic_photoset_count_images' => 'выява;выявы;выяў',
А в коде шаблона оно вот такое вот:
<h2>{$oTopic->getPhotosetCount()} {$oTopic->getPhotosetCount()|declension:$aLang.topic_photoset_count_images}</h2>
Однако несмотря на мою локализацию сайт почему-то для всех случаев подсасывал одно и то же значение: «выявы». Посмотрите, может у Вас на сайте тоже так? ;)
Где же магия?
Магия называется Smarty declension.Находится по адресу: /engine/modules/viewer/plugs/modifier.declension.php
В данном случае нас интересует метод:
function smarty_modifier_declension_russian($forms, $count) { $mod100 = $count % 100; switch ($count%10) { case 1: if ($mod100 == 11) return $forms[2]; else return $forms[0]; case 2: case 3: case 4: if (($mod100 > 10) && ($mod100 < 20)) return $forms[2]; else return $forms[1]; case 5: case 6: case 7: case 8: case 9: case 0: return $forms[2]; } }
По коду можно понять, что в случае локализации для своего языка нужно сделать отдельный метод в котором будут прописаны правила склонений для Вашего языка, к примеру для английского это(обратите внимание на название метода):
function smarty_modifier_declension_english($forms, $count) { if ($count==1) return $forms[0]; else return $forms[1]; }
Там все просто, если предмет один — бери значение один, если много — то бери значение два:
'topic_photoset_count_images' => 'image;images;images',
Вот вам и решение. Всем спасибо, все свободны %)
3 комментария