Ключевые слова PoEdit - множественное число - PullRequest
8 голосов
/ 07 декабря 2011

Я включил в приложение систему локализации, подобную gettext, но моя функция перевода выглядит следующим образом:

 t($category, $string, [$plural_string, $number, $vprintf_arguments])

Мои ключевые слова PoEdit:

t:2
t:2,3
  • t: 2 указывает PoEdit на синтаксический анализ $string, и, очевидно, он работает
  • t: 2,3 должен сказать PoEdit, что он должен анализировать $string и $plural_string - но это не так: (

Он видит только $string, поэтому я не анализирую формы множественного числа ... Как я могу это исправить? Я не хочу переключать мою функцию на другой формат аргумента, потому что мне нравится этот: (

Также эта функция действует как замена sprintf:

  • если 3-й аргумент ($ множественная_строка) является массивом, то функция будет рассматривать значения из массива в качестве аргументов vsprintf
  • если 3-й аргумент является строкой и указан $ number, функция будет рассматривать $ vprintf_arguments в качестве аргументов для vsprintf (если они предоставлены), а $ mult_string - как форму множественного числа $ string

В любом случае PoEdit не должен мешать аргументам без кавычек, верно? Я имею в виду, что он будет анализировать только $ множественную строку как строку, если она выглядит как 'abc abc'

Ответы [ 2 ]

6 голосов
/ 15 декабря 2011

gettext имеет дело только с одной строкой за раз. После чего вы можете получить ngettext. (ищите синтаксис)

Там вы поместите один текст для единственного числа, другой для множественного числа, а также число.

Самое умное в том, что многие языки имеют совершенно другую структуру множественного числа, чем английский. Русский, например, использует три разные формы. Один для того, где счет заканчивается выраженным «один»: 1, 21, 31, 41 и т. Д. Вторая форма предназначена для подсчетов, которые заканчиваются выраженными 2, 3 или 4. Третья форма для отдыха ...

И с помощью ngettext это можно сделать. Да, в poedit нужно правильно определить множественную структуру целевого языка, но тогда он просто работает.

http://www.gnu.org/s/hello/manual/gettext/Plural-forms.html

1 голос
/ 15 декабря 2011

Как ответил Тор-Бьорн Фьелнер, на самом деле это должно сработать.

Если вы скажете poedit, что язык действительно имеет множественное число ( Перевод множественных форм с помощью Poedit ) и учел ваши ключевые слова, poedit предлагает их для перевода.

Пример

Множественные формы: nplurals=2; plural=n != 1;

Ключевые слова:

  • t:2
  • t:2,3

Код PHP:

<?php

t("cat", "strA");

t("cat", "strB1", "strB2", 2, array());

t("cat", "strC1", "strC2", 3, array());

Пользовательский интерфейс Poedit:

Poedit Plural Forms

Что я не понял в вашем вопросе, так это вопрос о массивах и тому подобном,Я не смог расшифровать то, что вы намереваетесь в области poedit / gettext, я думаю, что ваш вопрос будет полезен, если вы добавите несколько конкретных примеров кода и каков будет результат для них.

...