在Mac OSX中添加语言环境

25

我在MAMP环境中使用gettext。我有es_ESca_ESen_USgl_ES的本地文件。前三个没问题,但对于第四个,当尝试将本地化翻译文件绑定到gl_ES语言(西班牙的加利西亚语)时,会出现错误。这不是apache或PHP的问题,因为其他语言能正常工作(而且在我的CentOS服务器上,我有gl_ES包并且也能正常工作)。

所以我意识到我的Mac OS X版本10.6.8没有加利西亚支持。这很奇怪,因为它支持Spanish、Catalan和Euskera,这是西班牙的其他三种官方语言。一些终端命令如下:

$ locale -a | grep _ES
ca_ES
ca_ES.ISO8859-1
ca_ES.ISO8859-15
ca_ES.UTF-8
es_ES
es_ES.ISO8859-1
es_ES.ISO8859-15
es_ES.UTF-8
eu_ES
eu_ES.ISO8859-1
eu_ES.ISO8859-15
eu_ES.UTF-8
$ ll /usr/share/locale/ | grep _ES
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 ca_ES/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 ca_ES.ISO8859-1/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 ca_ES.ISO8859-15/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 ca_ES.UTF-8/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 es_ES/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 es_ES.ISO8859-1/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 es_ES.ISO8859-15/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 es_ES.UTF-8/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 eu_ES/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 eu_ES.ISO8859-1/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 eu_ES.ISO8859-15/
drwxr-xr-x   8 root  wheel   272B  3 dic  2010 eu_ES.UTF-8/

回归分析

  • 我尝试使用安装光盘(添加语言包),但没有成功:它们只是操作系统的翻译。
  • 我找到了一个类似的问题,但没有那么多信息,也没有好的答案。
  • 我考虑使用localedef作为一个选项,但似乎只能在已经有基础文件的情况下创建.UTF-8或类似的文件。

我不知道如何在Mac OS X上添加加利西亚语支持(或任何其他语言支持)。

如何在Mac OS X中添加新的语言环境?

3个回答

17

经过数小时的搜寻、阅读Perl代码和苦思冥想,我得出结论:在区域设置创建和定义方面,苹果公司犯了极大的错误。事情是这样的:OSX给你提供了一个(咳咳...拙劣的)Perl实用脚本,位于/usr/bin/localedef,它应该能够创建新的区域设置。手册上说使用方法应该像这样(在usr/share/locale内运行):

localedef -i base_file -f UTF-8 new_locale_name
根据 OP 所述,该命令仅用于复制当前区域设置。但我甚至无法使其工作!我不懂 Perl ,但在 /usr/bin/localedef 中至少找到了一个疏忽的代码错误(第 512 行引用了一个名为 set_escape_char 的子程序,实际上应该是 set_escape),除此之外我根本就不能让 localedef 工作,所以这个方法行不通。正如 @alombarte 所述,您可以使用 cp -R src_locale trg_locale 来复制当前语言环境的目录,但他忘记提到源语言环境和目标语言环境之间存在差异,您需要手动更改新语言环境目录中的文本文件。
例如,我想创建 es_NI.UTF-8(尼加拉瓜)区域设置,包括正确的货币代码和货币信息,以下是我的操作步骤:
cd /usr/share/locale
sudo cp -R es_MX.UTF-8 es_NI.UTF-8
sudo vim es_NI.UTF-8/LC_MONETARY
# changed MXN to NIO, $ to C$, etc...
# saved LC_MONETARY

根据您对新地区的使用需求,您可能需要更改其他相关值。 这里 是我能在网上找到的最全面的区域设置信息集合。如果我是一名更好的程序员,我会编写一个脚本,将该网站的“glibc”导出格式重新格式化,以便在Mac OSX中与localedef命令配合使用。

P.S. 对于@alombarte的初始否定,我表示歉意...尽管他的回答并没有回答实际问题,但我没有意识到以任何其他方式处理它会如此难以做到。


1
有没有人能够解释如何使用glibc .txt文件创建OSX本地化? - Ryan Allen
2
我在El Capitan上已经为此奋斗了数小时,由于新的rootless机制,无法在/usr/share/local/中编写。 - fedeisas
1
@fedeisas 我的一位同事给我发了一份关于如何修改 /usr/share/local 的说明:禁用“无根”模式(也称为系统完整性保护,“SIP”)的正确方法是临时启动恢复模式(在启动时按住 Command+R),然后使用终端中的 csrutil disable 命令(或 csrutil enable 命令重新启用)。终端可通过在恢复模式下启动的安装程序菜单中访问。 - kstevens715
1
10年过去了,/usr/bin/localedef中的同样错误仍然存在... 唉。 - undefined

12
这应该可以解决问题:
cd /usr/share/locale
sudo cp -R es_ES gl_ES

然后打开一个新的终端会话,再次列出区域设置。Galician 应该会出现 :)


谢谢!太明显了... :-) 实际上我也是这样做的,以便拥有相同的:sudo cp -R es_ES.ISO8859-1 gl_ES.ISO8859-1 sudo cp -R es_ES.ISO8859-15 gl_ES.ISO8859-15 sudo cp -R es_ES.UTF-8 gl_ES.UTF-8 - Natxet
14
这并不是安装新的区域设置语言,而是复制已经存在于系统中的一个区域设置语言。 - Alejandro García Iglesias
6
如@GarciaWebDev所述,这并没有回答如何在Mac OS X中添加新的本地化语言的实际问题。 - AndyPerlitch
4
这种方法(正如先前所提到的,只是 复制 现有的语言环境),在 macOS 10.11(El Capitan)引入 SIP 后停止工作。 - mklement0
请阅读注释:不适用于最近的Mac,正如@mklement0所解释的那样。 - Kamafeather

6

经过调查发现,在Mac OS X 10.10.3版本中,西班牙语和大多数欧洲语言的排序功能仍然存在问题。这些区域设置的排序定义与ASCII定义相链接。这会导致在PostgreSQL上出现ORDER BY子句等问题。


10.12.6 仍然有问题。 - François

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接