Entri Wikipedia untuk GNU gettext menunjukkan contoh di mana lokal hanyalah bahasa, "fr". Sedangkan 'i18n gettext() contoh "hello world"' di SO memiliki nilai lokal dengan bahasa dan negara, "es_MX
“.
Saya telah memodifikasi “es_MX
” contoh untuk hanya menggunakan bahasa, “es”. Ini mencakup pembuatan katalog pesan "es" daripada "'es_MX'" dan menjalankan program dengan variabel lingkungan LANG yang disetel ke "es". Tetapi ini menghasilkan teks bahasa Inggris daripada bahasa Spanyol yang diharapkan.
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
Menurut Mengontrol lokal Anda dengan variabel lingkungan:
variabel lingkungan, LANGUAGE, yang
hanya digunakan oleh gettext GNU … Jika
ditentukan, LANGUAGE lebih diutamakan
daripada LC_ALL, LC_MESSAGES, dan LANG.
LANGUAGE=es.utf8 ./hellogt
menghasilkan teks Spanyol yang diharapkan daripada bahasa Inggris.
Namun ini tidak menjelaskan mengapa “LANG=es” tidak berfungsi.
Jawaban yang Diterima:
Wikipedia mungkin bukan referensi terbaik untuk hal-hal seperti ini. Biasanya memiliki contoh yang sangat sederhana yang mungkin tidak dapat diterapkan secara luas, dibangun untuk memahami konsep lebih dari untuk pertimbangan praktis.
Mengapa tidak menggunakan dokumentasi gnu sendiri?
http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale
Anda dapat menyetel LANGUAGE ke "es" (atau bahkan "es:fr:en" untuk daftar prioritas), tetapi LANG masih perlu disetel ke es_MX atau semacamnya. Dokumen menjelaskannya dengan cukup jelas.