gettext 基本範例

測試環境

  • Ubuntu 14.04

程式碼

example/i18n/gettext/basic/main.js

#!/usr/bin/gjs

const GLib = imports.gi.GLib;

const GetText = imports.gettext;
const _ = GetText.gettext;

const _Package = 'vlc';

GetText.bindtextdomain(_Package, '/usr/share/locale');
GetText.textdomain(_Package);

print('===== locale =====');
print('LANG: \t\t\t', GLib.getenv('LANG'));
print('LANGUAGE: \t\t', GLib.getenv('LANGUAGE'));
print('LC_ALL: \t\t', GLib.getenv('LC_ALL'));
print('===== text =====');
print(_('File'));

example/i18n/gettext/basic/zh_TW.sh

#!/bin/sh

export LANG=zh_TW.UTF-8
export LANGUAGE=zh_TW.UTF-8
export LC_ALL=zh_TW.UTF-8
./main.js

example/i18n/gettext/basic/zh_CN.sh

#!/bin/sh

export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
./main.js

example/i18n/gettext/basic/en_US.sh

#!/bin/sh

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
./main.js

測試

zh_TW

請確保「/usr/share/locale/zh_TW/LC_MESSAGES/vlc.mo」這個檔存在。

請確保「locale -a | grep zh_TW.utf8 」會顯示「zh_TW.utf8」。

然後執行

$ ./zh_TW.sh

顯示

===== locale =====
LANG:                    zh_TW.UTF-8
LANGUAGE:                zh_TW.UTF-8
LC_ALL:                  zh_TW.UTF-8
===== text =====
檔案

請對照「Github / videolan / vlc / po / zh_TW.po」這裡的翻譯。

會看到

msgid "File"
msgstr "檔案"

zh_CN

請確保「/usr/share/locale/zh_CN/LC_MESSAGES/vlc.mo」這個檔存在。

請確保「locale -a | grep zh_CN.utf8 」會顯示「zh_CN.utf8」。

然後執行

$ ./zh_CN.sh

顯示

===== locale =====
LANG:                    zh_CN.UTF-8
LANGUAGE:                zh_CN.UTF-8
LC_ALL:                  zh_CN.UTF-8
===== text =====
文件

請對照「Github / videolan / vlc / po / zh_CN.po」這裡的翻譯。

會看到

msgid "File"
msgstr "文件"

en_US

執行

$ ./en_US.sh

顯示

===== locale =====
LANG:                    en_US.UTF-8
LANGUAGE:                en_US.UTF-8
LC_ALL:                  en_US.UTF-8
===== text =====
File

注意事項

mo檔是否存在

若是「/usr/share/locale/zh_TW/LC_MESSAGES/vlc.mo」 或是「/usr/share/locale/zh_CN/LC_MESSAGES/vlc.mo」 不存在。

執行下面的指令安裝「vlc-data」這個套件

$ sudo apt-get install vlc-data

若有安裝「vlc-data」這個套件

執行

$ dpkg -S /usr/share/locale/zh_TW/LC_MESSAGES/vlc.mo

顯示

vlc-data: /usr/share/locale/zh_TW/LC_MESSAGES/vlc.mo

執行

$ dpkg -S /usr/share/locale/zh_CN/LC_MESSAGES/vlc.mo

顯示

vlc-data: /usr/share/locale/zh_CN/LC_MESSAGES/vlc.mo

locale是否支援

zh_TW

執行「locale -a | grep zh_TW.utf8 」若是沒有顯示「zh_TW.utf8」。

請執行

$ sudo locale-gen zh_TW.UTF-8

再執行

locale -a | grep zh_TW.utf8

就會顯示

zh_TW.utf8

在「/var/lib/locales/supported.d/local」這個檔

$ cat /var/lib/locales/supported.d/local | grep zh_TW

也會看到新加入一行

zh_TW.UTF-8 UTF-8

所以上面的方式,也可以改成直接在「/var/lib/locales/supported.d/local」加入一行「zh_TW.UTF-8 UTF-8」

然後執行

$ sudo locale-gen

或是

$ sudo locale-gen --purge

zh_CN

執行「locale -a | grep zh_CN.utf8 」若是沒有顯示「zh_CN.utf8」。

請執行

$ sudo locale-gen zh_CN.UTF-8

其餘的參照上面「zh_TW」的作法

更多參考

Manual

相關檔案

  • /var/lib/locales/supported.d/local
  • /usr/lib/locale/locale-archive
  • /etc/default/locale