Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Несколько языков


Автор: CyClon 24.2.2008, 14:05
Собственно, интересует описание вариантов организации мультиязычности на сайте (т.е. системные сообщения будут выводиться на выбранноя языке).

На данный момент в голове крутиться всего лишь один разумный вариант: инклюдим файл, например /languages/$language.php с подобным содержанием:

Код
<?php

define('LANGUAGE_ERROR', 'Ошибка!');
define('LANGUAGE_WELCOME', 'Добро пожаловать!');
define('LANGUAGE_GO', 'Перейти');


И далее просто используем в коде константы.

Но что-то мне подсказывает, что есть более разумные варианты организации мультиязычности smile Поделитесь? smile

Автор: gta4kv 24.2.2008, 14:12
Имхо, тоже самое, но только array()'ем надо делать.

Автор: CyClon 24.2.2008, 14:23
Этот вариант не рассматриваю, ибо получиться тормознутее даже чем у меня в первом посте smile

Добавлено через 1 минуту и 43 секунды
Да и смысл от Array нулевой, что писать LANGUAGE_WELCOME, что $language['welcome'] - одно и тоже, только теоретичеси массив должен больше ресурсов жрать. Плюс значения массива можно изменять (что нам абсолютно не нужно).

Автор: WolfON 24.2.2008, 14:38
Эффективно для этого использовать xml, в техногрете было много статей на эту тему

А константы для этого дела - бред сумасшедшего

Автор: gta4kv 24.2.2008, 14:47
CyClon, предложил array, т.к уже выше сказано - "А константы для этого дела - бред сумасшедшего".
XML тоже интересная идея. Но помойму не очень удобная.

Автор: skyboy 24.2.2008, 15:25
http://ua2.php.net/gettext

Автор: gta4kv 24.2.2008, 15:32
skyboy, ваще не в тему

Автор: Daevaorn 24.2.2008, 15:48
Цитата(gta4kv @  24.2.2008,  16:32 Найти цитируемый пост)
skyboy, ваще не в тему 

похоже вы не в теме самиsmile

Автор: CyClon 24.2.2008, 15:54
gta4kv, Ну тогда приведи хотя бы пару фактов в пользу массивов. Я могу привести как минимум один против, причем весомый - константы видны везде, массивы придется объявлять глобальными для видимости в функциях.

Вот вы пишите, "бред сумасшедшего". А обосновать? Чем тот же gettext/xml будет лучше такого варианта?

Автор: awers 24.2.2008, 16:54
Функции gettext реализуют NLS (Native Language Support) API, который может использоваться для интернационализации ваших PHP-приложений

что не так?

Автор: CyClon 24.2.2008, 17:07
Другими словами - дает возможность юзать несколько языков на сайте. Теперь вчитайся в мой пост. Я просил аргументы в пользу gettext/xml и против использования констант.

Автор: awers 24.2.2008, 20:55
Цитата(CyClon @ 24.2.2008,  17:07)
Другими словами - дает возможность юзать несколько языков на сайте. Теперь вчитайся в мой пост. Я просил аргументы в пользу gettext/xml и против использования констант.

Ну мне кажется что приемущество констант не отнять (видимость). Но ИМХО константы это муветон. Представь как будут смотреться 2-3 тысячи констант. Не правильно это.

Ассоциативные массивы - в топку сразу. Они намного больше памяти кушают.
XML - тут надо искать подход. Если незнать как на данном этапе устроин движок - каких либо плюсов выделить нельзя.

Автор: solenko 25.2.2008, 02:11
Цитата

Ассоциативные массивы - в топку сразу. Они намного больше памяти кушают.
XML - тут надо искать подход. 

А xml вы в куда парсить будете? Уж не в асоциативный ли массив )
XML/ini/ваш_вариант хорош только тем, что с ним может работать не программист. Ну и еще один довод есть -- это модно )

А использовал кто-то gettext? Я видел олько один продукт с его использованием -- gallery2. Если использовали, может поделитесь опытом, расскажите о подводных камнях? А то вроде бы и самый логичный способ локализации и, в то же время, мало кто пользует.

Автор: awers 25.2.2008, 02:16
не . геттекст я в живую не видел.. 

по поводу XML - нефакт что в массивы. надо смотреть что сейчас наработанно, что-бы что-то советовать или решать

Автор: skyboy 25.2.2008, 09:00
[offtopic]
Цитата(solenko @  25.2.2008,  01:11 Найти цитируемый пост)
самый логичный способ локализации и, в то же время, мало кто пользует

кстати, судя по форуму, такой подход не только на gettext распространяется :(
[/offtopic]

Автор: CyClon 25.2.2008, 09:58
Цитата
2-3 тысячи констант


Ну, представь xml файл в 3 тысячи строк, что, намного проще чтоли будет? smile
Опять же с того же XML данные будут гнаться в константы, которые уже будут использоваться в коде. Так что думаю пока на своем варианте остановлюсь, потом если нужно, просто прикручу парсер и особо ничего менять не придется.

На счет gettext - недостаточно инфы для его использования, да и пользы пока не вижу smile
Цитата
2-3 тысячи констант


Ну, представь xml файл в 3 тысячи строк, что, намного проще чтоли будет? smile
Опять же с того же XML данные будут гнаться в константы, которые уже будут использоваться в коде. Так что думаю пока на своем варианте остановлюсь, потом если нужно, просто прикручу парсер и особо ничего менять не придется.

На счет gettext - недостаточно инфы для его использования, да и пользы пока не вижу smile

Автор: lumega 25.2.2008, 11:01
я вижу очень большое преимущество в геттексте.
Это ж встроенный переводчик. Не нужно задавать тонну непонятных переменных или констант. Пишем на родном языке, а потом достаточно просто обратиться к переводчику (нужной языковой таблице). Думаю мысль понятна. smile 

Автор: CyClon 25.2.2008, 11:19
Цитата
я вижу очень большое преимущество в геттексте.
Это ж встроенный переводчик. Не нужно задавать тонну непонятных переменных или констант. Пишем на родном языке, а потом достаточно просто обратиться к переводчику (нужной языковой таблице). Думаю мысль понятна.  


Поятно smile Но писать на русском языке я внутри скриптом однозначно не буду smile В общем. как я понял - gettext - это использование вместо констант выражений на одном из языков, которые при надобности через таблицу соответствий транслируются в другие? )

Автор: CyClon 25.2.2008, 15:43
Кто использует gettext, плз приведите пример .po файла.

ЗЫ: На самом деле очень удобная штука оказывается. Просто хочу на всякий случай реализовать свой парсер файлов, на случай если на сервере не будет gettext.

Автор: CyClon 25.2.2008, 22:09
Код
<?php

$locale['Hello world!'] = 'Привет мир!';
$locale['Loading...'] = 'Загрузка...';

function _($string)
{
    if (isset($GLOBAL['locale'][$string])) {
        return $GLOBAL['locale'][$string];
    } else {
        return $string;
    }
}

echo _('Hello world!');


Можно парсить XML файл, загонять все данные в массив и так использовать. Плюс данного подхода - полная совместимость с gettext (использовать только при его отсутствии).

Автор: Daevaorn 25.2.2008, 22:11
gettext позаоляет делать умный pluralization...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)