在我的Mac中,/usr/share/locale
是放置所有语言环境的默认区域设置目录。我想指定一个自定义语言环境目录,以便C++程序(即libc/libc++(可以从那里获取语言环境。
#include <locale>
int main() {
std::locale a("en_US.utf-8"); // OK.
std::locale b("en_US.utf8"); // Error. Failed to create locale for en_US.UTF8
}
此C++程序无法为第二种情况构造语言环境,因为 Mac 上的目录中/usr/share/locale
没有en_US.utf8
文件夹。我想通过复制/链接en_US.utf-8
来创建en_US.utf8
,但是目录/usr/share/locale
是写保护的,即即使使用 sudo 模式也无法更改此目录。更改此目录的唯一方法是在安全模式下重新启动mac,更改此目录并在正常模式下重新启动。这不是一个令人鼓舞的选择。所以我需要在自定义目录中复制整个/usr/share/locale
目录,并更改自定义目录中的区域设置文件夹。我所需要的只是一种为我的C++程序指定自定义语言环境目录的方法。
任何通过在一个地方更改程序而不更改所有出现的区域设置用法(utf8
->utf-8
(来使我的C++程序工作的解决方案对我来说都是有效的解决方案。
注意:在 std::locale 上编写包装器对我不起作用,因为正如我所提到的,我无法承受在一个非常大的C++项目中更改语言环境的所有用法。
我得到了问题的答案。
PATH_LOCALE=<new_path> ./binary
它适用于mac(BSD(。 谢谢。