ФорумПрограммированиеPHP для идиотов → локализация в шаблонах

локализация в шаблонах

  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 4 апреля 2010 г. 21:31, спустя 7 часов 43 минуты 23 секунды

    я вот когда то как только узнал про gettext, попробовал, вот как озарило меня - тута надо абстрагировать этот функционал, ибо он мне не сильно понравлся сразу. Потому как если делать крутую локлаизацию для всяких та польских языков и прочего, по-любому надо обворачивать, ибо всякие склонения валют или типа того - один хрен надо свои методы писать….
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 апреля 2010 г. 22:04, спустя 33 минуты 15 секунд


    я вот когда то как только узнал про gettext, попробовал, вот как озарило меня - тута надо абстрагировать этот функционал, ибо он мне не сильно понравлся сразу. Потому как если делать крутую локлаизацию для всяких та польских языков и прочего, по-любому надо обворачивать, ибо всякие склонения валют или типа того - один хрен надо свои методы писать….
    а чем тебя встроенные средства не устроили? вроде как заебись + скорость на уровне
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 4 апреля 2010 г. 22:09, спустя 5 минут 13 секунд

    неужели быстрее чем массивы?

    меня не устроило:

    setlocale(LC_ALL, 'cs_CZ'); # это
    printf(ngettext("%d window", "%d windows" /* и этот второй аргумент. Ну зачем он? можно ж без него */, 1), 1); // 1 okno
    printf(ngettext("%d window", "%d windows", 2), 2); // 2 okna
    printf(ngettext("%d window", "%d windows", 5), 5); // 5 oken
    Спустя 86 сек.
    ага, и нативной поддержки vsprintf нету -> я сам должен оборачивать ngettext vsprintf'ом. Читаемости это не добавляет
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 апреля 2010 г. 22:18, спустя 9 минут 29 секунд

    Абырвалг, он кеширует языковые файлы между вызвоами, теоретически должен быть быстрее чем массив например на 1500-5кк строк, ну это все проверять надо конечно :)

    на 20-30 переводах то конечно массив быстрее
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 4 апреля 2010 г. 22:24, спустя 5 минут 22 секунды

    я думаю, что не plural-переводы, вставленные через шаблонизатор тоже можно кешировать.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 апреля 2010 г. 22:28, спустя 3 минуты 57 секунд


    я думаю, что не plural-переводы, вставленные через шаблонизатор тоже можно кешировать.
    я думаю что можно кешировать хтмл код. есть возражения? :)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 4 апреля 2010 г. 22:57, спустя 29 минут 36 секунд

    ну это не всегда возможно. Выводим список комментариев.
    1 условие: для админов около каждого коммента есть кнопка ред. и удалить.
    2 условие: для пользователя, написавшего коммент около каждого коммента есть кнопка ред. (может быть еще одно условие: коммент должен быть не старше N секунд)
    3 условие: у последнего комментария есть кнопка удалить

    кроме того, время выводится в относительном формате (несколько секунд назад, 4-мя минутами ранее, …)

    и как тут кешировать html-код?
    Спустя 36 сек.
    какой-то я сегодня зануда. Это с бодуна наверно
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 апреля 2010 г. 23:00, спустя 2 минуты 24 секунды

    Абырвалг, напивайся чаще, хоть посты интереснее
    Спустя 21 сек.
    1.2.3 можно на ява скрипте провернуть все если сильно надо)
    Спустя 35 сек.
    да и я бы кешировал json …. и каменты на аяксе подгружал сразу :D
    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 5 апреля 2010 г. 14:16, спустя 15 часов 16 минут 30 секунд


    а чем тебя встроенные средства не устроили? вроде как заебись + скорость на уровне

    не скажу что встроенные средства хреновые, но, эти мопо файлы меня кумарят, если честно, но это фигня.
    Ну вот, допустим ты перенёс всё на другой сервак, на котором еще нету _. Что делать? Логично изначально написать оболочку, которая будет врубаться при отсутствии _. Она также может конвертить *.po в те же массивы в *.php.
    Но вообщем, когда мы помещаем сам _ в оболочку на основе объектов, мы получаем преимущества, которые нам дает ООП - фабричный метод переключить языки, есть какой то общий функционал для всех языков, есть индивидуальный для каждого. Причём всё происходит как ты хочешь. Причем сюда можно включить всё что связано с локалями, ту же usort($array, 'strcoll'); и всё такое, да даже просто, чтобы не мозолила глаза вся волокита. Короче, я вообще отказался от _ и юзаю свой велосипед ))

    Кстати, польский варианты описания количества файлов:
    Различают шесть случаев:
    ноль фалов, один файл, больше одного и меньше четырех файлов, больше 4 и меньше 22, а также больше 21, когда последняя цифра больше 1 и меньше 5.  И еще один случай - когда последняя цифра не попадает в диапазон.


    function NumFiles($count)
    {
    if ($count == 0) {
    return 'Nie na plikyw';
    }
    elseif ($count == 1) {
    return '1 plik';
    }
    elseif ($count <= 4) {
    return "$count pliki";
    }
    elseif ($count <= 21) {
    return "$count plikyw";
    }
    else {
    $last_digit = substr($count, -1);
    if ($last_digit >= 2 && $last_digit <= 4) {
    return "$count pliki";
    }
    else {
    return "$count plikyw";
    }
    }
    }



    ну не пиздец ли?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 апреля 2010 г. 14:29, спустя 12 минут 52 секунды

    kostyl, я понимаю все плюсы ооп, ты их мне можешь не объяснять, я не понимаю доп нагрузки на вывод СТРОКИ, вот это мне непонятно. нахуй это надо? я бы поступил так - "на вашем сервере не установлен геттекст, установите его. пошел нахуй, спасибо". все, это правильный вариант имхо
    Спустя 26 сек.
    ыы:: я то получим магенту, которая страницу генерит 25 секунд у меня на буке :-D

    ыыыы:: нрг чмокэ
    Сапожник без сапог
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 5 апреля 2010 г. 14:40, спустя 10 минут 41 секунду

    kostyl, Это уж слишком.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 5 апреля 2010 г. 15:15, спустя 35 минут 28 секунд

    ыы:: я то получим магенту, которая страницу генерит 25 секунд у меня на буке :-D

    ага, я тоже не забуду прекрасные моменты, проведенные с магентой
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 5 апреля 2010 г. 15:35, спустя 19 минут 23 секунды

    та ну, я что прямо такую кучу наговорил???

    abstract class Lang {

    private $_Strings;

    public function __construct()
    {
    $this->_Strings = array();
    $this->_Strings['HELLOWORD'] = 'Привет мир';
    /*
    …..
    */
    $this->_createTranslate();
    }

    public function _($Key)
    {
    if (array_key_exists($Key, $this->_Strings)) {
    return $this->_Strings[$Key];
    }
    else {
    throw new Exception("Translate key $Key does not exists");
    }
    }

    protected function _TranslateString($Key, $Value)
    {
    if (array_key_exists($Key, $this->_Strings)) {
    $this->_Strings[$Key] = $Value;
    }
    else {
    throw new Exception("Translate key $Key does not exists");
    }
    }

    abstract protected function _createTranslate();
    }


    class Lang_Mat extends Lang {

    protected function _createTranslate()
    {
    $this->_TranslateString('HELLOWORD', 'Привет мир бля!');
    /*
    …..
    */
    }
    }

    $Lang = new Lang_Mat();
    echo $Lang->_('HELLOWORD');


    Это что медленно будет?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 5 апреля 2010 г. 15:59, спустя 24 минуты 31 секунду

    т.е. под каждый язык свой класс? или под каждое пространство имен свой класс? О_О
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 5 апреля 2010 г. 16:14, спустя 14 минут 17 секунд

    Абырвалг,

    т.е. под каждый язык свой класс? или под каждое пространство имен свой класс? О_О

    Под язык. Ну это я так по быстрому накидал. А вообще можно делать как удобно тебе или приложению, или вам обоим…

Пожалуйста, авторизуйтесь, чтобы написать комментарий!