GNU/Linux >> Belajar Linux >  >> Linux

Linux – Mengapa Es_mx Lokal Bekerja Tapi Tidak Es?

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.


Linux
  1. Mengapa Ekspresi Reguler Bekerja Di X Tapi Tidak Di Y?

  2. Linux – Mengapa Kami Menggunakan Su – Dan Bukan Hanya Su?

  3. Linux – Arch Linux :Pacman Tidak Berfungsi Saat Chroot?

  1. Linux – Mengapa Setuid Tidak Bekerja??

  2. Mengapa `zip` Dalam A For Loop Bekerja Saat File Ada, Tapi Tidak Saat Tidak?

  3. Mengapa `keluar &` Tidak Berfungsi?

  1. Mengapa find -exec mv {} ./target/ + tidak berfungsi?

  2. Mengapa Windows tidak mengenali file di dalam partisi Linux?

  3. Mengapa regex ini tidak berfungsi di linux?