Mục nhập Wikipedia cho GNU gettext cho thấy một ví dụ trong đó miền địa phương chỉ là ngôn ngữ, "fr". Trong khi đó, 'i18n gettext () thì xin chào thế giới Ví dụ' trong SO có giá trị bản địa với cả ngôn ngữ và quốc gia, " es_MX
".
Tôi đã sửa đổi es_MX
ví dụ "" để chỉ sử dụng lanuage, "es". Điều này bao gồm việc tạo một danh mục tin nhắn "es" thay vì "'es_MX'" và gọi chương trình với biến môi trường LANG được đặt thành "es". Nhưng điều này tạo ra văn bản tiếng Anh thay vì tiếng Tây Ban Nha dự kiến.
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
Theo Kiểm soát miền địa phương của bạn với các biến môi trường :
biến môi trường, LANGUAGE, chỉ được sử dụng bởi GNU gettext ... Nếu được xác định, LANGUAGE được ưu tiên hơn LC_ALL, LC_MESSAGES và LANG.
LANGUAGE=es.utf8 ./hellogt
sản xuất văn bản tiếng Tây Ban Nha dự kiến chứ không phải tiếng Anh.
Nhưng điều này không giải thích tại sao "LANG = es" không hoạt động.
xx_YY
trong đó xx
là một phụ đề ngôn ngữ và YY
là một phụ đề khu vực, đôi khi được theo sau bởi một dấu hiệu bộ ký tự.