Záznam Wikipedie pro GNU gettext ukazuje příklad, kde je národním prostředím pouze jazyk, „fr“. Zatímco příklad ‚i18n gettext() „hello world“ v SO má hodnotu národního prostředí s jazykem i zemí, „es_MX
“.
Upravil jsem „es_MX
” příklad použít pouze lanuage, “es”. To zahrnuje vytvoření katalogu zpráv „es“ spíše než „‘es_MX“ a vyvolání programu s proměnnou prostředí LANG nastavenou na „es“. Tím však vznikne anglický text spíše očekávaná španělština.
cat >hellogt.cxx <<EOF
// hellogt.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
int main (){
setlocale(LC_ALL, "");
bindtextdomain("hellogt", ".");
textdomain( "hellogt");
std::cout << gettext("hello, world!") << std::endl;
}
EOF
g++ -ohellogt hellogt.cxx
xgettext -d hellogt -o hellogt.pot hellogt.cxx
msginit --no-translator -l es -o hellogt_spanish.po -i hellogt.pot
sed --in-place hellogt_spanish.po --expression='/#: /,$ s/""/"hola mundo"/'
sed --in-place hellogt_spanish.po --expression='s/PACKAGE VERSION/hellogt 1.0/'
mkdir -p ./es.utf8/LC_MESSAGES
msgfmt -c -v -o ./es.utf8/LC_MESSAGES/hellogt.mo hellogt_spanish.po
LANG=es.utf8 ./hellogt
Podle ovládání národního prostředí pomocí proměnných prostředí:
proměnná prostředí LANGUAGE, kterou
používá pouze GNU gettext… Je-li
definováno, má LANGUAGE přednost
před LC_ALL, LC_MESSAGES a LANG.
LANGUAGE=es.utf8 ./hellogt
vytváří očekávaný španělský text spíše než anglický.
To však nevysvětluje, proč „LANG=es“ nefunguje.
Přijatá odpověď:
Wikipedie pravděpodobně není nejlepší reference pro takové věci. Obvykle má velmi jednoduché příklady, které nemusí být široce použitelné, vytvořené pro pochopení pojmů více než pro praktické úvahy.
Proč nepoužít vlastní dokumentaci gnu?
http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale
Můžete nastavit LANGUAGE na „es“ (nebo dokonce „es:fr:en“ pro seznam priorit), ale LANG by stále musel být nastaven na es_MX nebo něco podobného. Dokumenty to vysvětlují poměrně jasně.