GNU/Linux >> Znalost Linux >  >> Linux

Linux – Proč Locale Es_mx funguje, ale Es ne?

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ě.


Linux
  1. Linux – Arch Linux:Pacman nefunguje při Chrootingu?

  2. Linux – Proč Setuid nefunguje?

  3. Proč Tomcat pracuje s portem 8080, ale ne s 80?

  1. Proč nefungují úpravy javascriptu v nástrojích pro vývojáře Chrome?

  2. Proč 'dd' nefunguje pro vytvoření bootovatelného USB?

  3. ZFS pod Linuxem, funguje to?

  1. Proč regulární výraz funguje v X, ale ne v Y?

  2. Linux – proč používáme Su – a nejen Su?

  3. Linux Setuid nefunguje?