c - 使用 setlocale() 和 gettext() 在 Ubuntu 上测试语言环境

标签 c linux locale

我正在尝试编写一个程序,根据区域设置以法语打印英文消息。

我写了下面的示例代码:

#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

关于c - 使用 setlocale() 和 gettext() 在 Ubuntu 上测试语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34655966/

相关文章:

c - malloc() 与 free() 相比如何工作

c++ - 手动反编译引用

iPhone - 如何获取用户的日期格式

c - 在 C 中实现此 for 循环的更好方法

linux - 为什么 set -e 会导致我的脚本在遇到以下情况时退出?

python - 如何在整个目录中查找具有特定扩展名的文件,然后复制到另一台服务器

Python文件读取

java - 如何获取系统语言?

java - 当 "inLocale"设置为土耳其语 (JDK 1.6.0_29) 时可用的语言环境显示国家?

c - 有没有办法转储所有 native 内存?