AlkatraZ, сколько нужно переводов по умолчанию, русский и английский?
# Koenig (22.09.2016 / 13:36)
AlkatraZ, сколько нужно переводов по умолчанию, русский и английский?
Если пишешь оф. модуль, как в твоем случае, тебе нужен только сам шаблон.
Далее, кидаешь его мне, я загружаю его на Crowdin и там уже переводим на все языки, что у нас есть.
Однако для тестирования, чтоб "пощупать", можешь немного перевести сам себе на русский, с помощью PoEdit. Только не заливай результаты в репозиторий!
Официально от тебя нужна только доработка исходного кода и .pot шаблон.
===
Ну а для собственных модулей, сколько языков асилите, на столько и переводите.
Если перевода нет, будет выводиться исходная фраза на Английском.
ПРИМЕЧАНИЕ
Если пишете СВОЙ модуль, который не претендует на включение в оф. релиз, то в качестве исходного можете использовать любой язык. с которым вам комфортно работать, а уж потом переводить на другие языки.
ПРИМЕЧАНИЕ 2
Если не планируете пользоваться онлайн сервисами и число языков, на которые будете переводить невелико, то создавать .POT шаблоны не обязательно. С помощью PoEdit Вы можете создавать сразу .PO файлы для нужного языка. Единственное, надо правильно настроить каталог, указав там UTF-8 кодировку, расположение файлов и функцию перевода.
ПРИМЕЧАНИЕ 3
Для OpenSource проектов, на большинстве онлайн сервисов перевода предусмотрены полнофункциональные бесплатные экаунты. Главное, чтоб Ваш проект (модуль) имел открытый репозиторий (к примеру на Гитхабе) и находился под одной из свободных лицензий
https://opensource.org/licenses/category
Текст лицензии должен находиться с исходным кодом.
Если условия соблюдаются, тогда, к примеру, создаете экаунт на Crowdin, отправляете им заявку (там предусмотрена форма) на openSource, где указываете ссылку на свой репозиторий. В течение суток Вам придет ответ и экаунт будет переведен на полный режим.
Альк, Чутка поофтоплю.
Глянь небольшой кодик, правильно ли я понял реализацию плюрализации?
// _plural(12, 'authors');
public function _plural($int, $key)
{
if($this->words==false){
$this->content();
}
$num = $int%100;
if ($num>19) {
$num = $num%10;
}
switch ((int)$num) {
case 1:
$word = 0;
break;
case 2:
case 3:
case 4:
$word = 1;
break;
default:
$word = 2;
break;
}
return vsprintf($this->words[$key.'.'.$word], $int); //authors.2, 12 : авторов, 12
}
# ramzes (23.10.2016 / 20:47)
Альк, Чутка поофтоплю.
Глянь небольшой кодик, правильно ли я понял реализацию плюрализации?
// _plural(12, 'authors');
public function _plural($int, $key)
{
if($this->word
Не, там далеко не так просто, в PO файле есть что-то типа регулярки, которая задает правила множественных чисел, причем для каждого языка свое:
https://github.com/Gazenwagen/ ... o#L28
Соответственно и реализация довольно сложная, с новой Симфонии ее (плюрализацию) к примеру вообще выпилили и предлагают вместо нее какое-то извращение. Во 2-й Симфонии плюралки были.
Вот пример моей старой реализации:
https://github.com/Gazenwagen/ ... lural
Однако красивее всего плюрализация реализована у Зенда, они парсят непосредственно инструкцию из PO файла и обрабатывают ее, это лучший из вариантов.
---
Ну а реализация функции должна быть по правилам таковой (имя не важно):
translate($singular, $plural, $count)
Ты передаешь 3 аргумента: слово в единственном числе, слово во множественном числе и само число.
К примеру:
translate('apple', 'apples', 10)
на Русский переведет
(10) "яблок"
(1) "яблоко"
(3) "яблока"
Ты передаешь 3 аргумента: слово в единственн6ом числе, слово во множественном числе и само число.
зачем в единственном то?
у меня просто хранятся они в виде
author.0 = ""
author.1 = ""
author.2 = ""
0 это естественно ед. число.
по сути правила можно и подгружаемыми сделать, помню где то был файл со 100500 правилами, надо найти.
Но саму суть я верно понял?
# ramzes (23.10.2016 / 23:17)
зачем в единственном то?
Дело в том, что функция, если не найдено перевода, должна вернуть тебе исходное слово, что ты ей передаешь в аргументе. Для Английского (исходный для Gettext) существует 2 плюральные формы, вот их ты и передаешь функции.
а... точно) забыл, две другие функции возвращают, а этой я чето не добисал)
Не понравилось, что Poedit нельзя натравить на всю папку с сайтом целиком, в которой он сам найдёт языковые файлы. Приходится каждый раз открывать файлы вручную. Удобства не хватает.
Вот если бы слева была древовидная колонка из папок и всех найденных файлов...
# intelligent (01.01.2017 / 17:58)
Не понравилось, что Poedit нельзя натравить на всю папку с сайтом целиком, в которой он сам найдёт языковые файлы. Приходится каждый раз открывать файлы вручную. Удобства не хватает.
Вот если бы слев
С множеством файлов и их ручной обработкой действительно возникает некоторый геморой.
Но работу можно (и нужно) автоматизировать.
Теоретически, PoEdit хорош, когда ты работаешь со своим модулем и языковых файлов (доменов) у тебя мало. Тут этот редактор хорош, им же можно и извлекать из кода фразы и переводить и сразу же компилировать .MO файлы.
Но когда файлов и языков много (как в новом JohnCMS), уже возникает серьезная проблема, но к счастью она легко решается с помощью Grunt или командного .bat файла.
Для этого нам нужны официальные Gettext утилиты командной строки, которые (для Windows) можно качнуть отсюда:
https://mlocati.github.io/arti ... .html
Рекомендую
static версию, она не требует зависимостей.
После пишешь в бантике (или в задачах Grunt) нужные команды и вся рутина, на которую с PoEdit потратишь пару часов, решается за минуты.