Как gettext определяет, какие языки доступны - PullRequest
1 голос
/ 11 ноября 2011

Недавно я потратил некоторое время на перевод приложения PHP, работающего на Linux с Apache2.Чтобы заставить gettext работать, мне нужно было прикоснуться к системным каталогам для каждого языка, который я хотел бы поддержать, поэтому мне интересно, есть ли более простой способ поддержки получения текста из gettext на всех языках.

Мои файлы локалей находятся в подпрограммекаталог моего проекта:

./locale/sv_SE/LC_MESSAGES/default.po
./locale/es_BO/LC_MESSAGES/default.po

и код: находится в ./gettext.php вот так:

<?php
setlocale(LC_ALL, "es_BO.utf8");
bindtextdomain("default", "locale/"); # usually works
textdomain("default");
echo echo _("test");
?>

Код C - это точно такой же код, но с некоторыми заголовками.

Этот код не выведет мой испанский перевод, если я не "включу" боливийскую испанскую систему в целом с этим уродливым хаком, связав уже существующую локаль sv_SE с es_BO:

sudo ln -s /usr/lib/locale/sv_SE.utf8 /usr/lib/locale/es_BO.utf8

Updates

Я думаю, что мой вопрос был неправильным "Итак, как мне избежать выполнения команды ln -s , или просто скажите мне, если я поступаю неправильнопуть?"в основном то, что я хочу знать, если для gettext нужны эти файлы в / usr / lib / locale "или как я по-простому использую gettext только для перевода сообщений.

Update2 Iпопытался использовать setlocal(LC_MESSAGES, "es_BO.utf8"), но ему все еще нужны сообщения в / usr / lib / locale.

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Используйте locale -a, чтобы получить список сгенерированных локалей для вашей системы.Чтобы добавить в этот список, отредактируйте /etc/locale.gen и перезапустите locale-gen.

(Кроме того, gettext вообще ничего не выясняет, он пытается использовать текущую локаль, и, в случае неудачи, он может толькоотступить к C)

1 голос
/ 11 ноября 2011

Для проверки правильности работы определенного перевода вы должны правильно вызвать языковую среду как

#!/bin/bash
export LANG=es_BO
./yourprog

Я думаю, что ваш текущий языковой хак работает, потому что LANG = sv_SE в вашей текущей системе.В противном случае я рекомендую прочитать больше о gettext .

...