我正试图编写一个程序,根据语言环境用法语打印英语消息。
我写了以下示例代码:
#include <stdio.h>
#include <libintl.h>
#include <locale.h>
int main()
{
char *str = setlocale(LC_ALL, "fr_FR.UTF-8");
if(str == NULL)
printf("setlocale() cannot be honored");
else
printf("setlocale() return = %s n", str);
bindtextdomain("helloworld","/usr/share/locale");
textdomain("helloworld");
printf("%s", gettext("Hello!n"));
return 0;
}
我检查了文件/usr/share/i18n/SUPPORTED
,可以看到fr
在那里:
fr_FR.UTF-8 UTF-8
fr_FR ISO-8859-1
fr_FR@euro ISO-8859-15
我还试着运行sudo locale-gen fr-FR.UTF-8
。当我在命令行上运行locale
时,我看到:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
当我运行程序时,setlocale()
返回NULL
。有人能说出我缺了什么吗?
编辑
在尝试查找zh-CN
时,我还检查了目录/usr/share/locale/zh-CN/LC_MESSAGES
的内容。出现以下列表:
apt.mo gnome-panel-3.0.mo iso_639.mo
debconf.mo iso_15924.mo language-selector.mo
dpkg.mo iso_3166_2.mo libapt-inst1.4.mo
e2fsprogs.mo iso_3166.mo libapt-pkg4.12.mo
example-content.mo iso_4217.mo update-notifier.mo
ghex-3.0.mo iso_639_3.mo xdg-user-dirs.mo
如果locale -a
没有显示fr_fr区域设置,则说明您的系统上没有安装。
最好/最简单的方法可能稍微取决于发行版。本主题回答您的问题:https://askubuntu.com/questions/76013/how-do-i-add-locale-to-ubuntu-server