Mac下创建本地化目录

很好奇Mac下Finder中文件夹名字为"文稿"或"下载"的,在终端上ls却显示"Documents"和"Downloads",这是如何实现的呢?

通过查阅资料找到了系统文件夹的本地化目录:

$ % ls /System/Library/CoreServices/SystemFolderLocalizations
French.lproj ar.lproj da.lproj en.lproj he.lproj ko.lproj pl.lproj ro.lproj sv.lproj uk.lproj
Italian.lproj ca.lproj de.lproj es.lproj hr.lproj nl.lproj pt.lproj ru.lproj th.lproj zh_CN.lproj
Japanese.lproj cs.lproj el.lproj fi.lproj hu.lproj no.lproj pt_PT.lproj sk.lproj tr.lproj zh_TW.lproj

每个目录下面只有1个二进制文件: SystemFolderLocalizations.strings

$ cd /System/Library/CoreServices/SystemFolderLocalizations/zh_CN.lproj
$ ls
SystemFolderLocalizations.strings
$ file SystemFolderLocalizations.strings
SystemFolderLocalizations.strings: Apple binary property list

用PlistEdit Pro打开,可以看到是一个字典,包含对应的键值映射:

/media/images/blog/SystemFolderLocalizations.png

修改这个文件可不好玩,万一改错了就囧了,所以我们还是另找它法吧。

继续查找,发现了如下的方法。

假设我们要创建一个目录,叫做MyNotes,希望在Finder里面显示为“我的笔记”,那么需要这么做:

$ mkdir -p MyNotes.localized/.localized
$ touch MyNotes.localized/zh_CN.strings

输入如下内容即可:

"MyNotes" = "我的笔记";

我写了一个脚本来完成上述功能( Gist ):

#!/bin/sh

local=`locale|grep LC_CTYPE|awk -F'"' '{print $2}'|awk -F'.' '{print $1}'`

mkdir -p $1.localized/.localized
echo \"$1\" = \"$2\"\; > $1.localized/.localized/$local.strings

使用时,第1个参数为英文名,第2个参数为中文名。

参考资料:

http://hints.macworld.com/article.php?story=20020926061746306

http://blog.tenyi.com/2011/12/localized-folder-name-on-mac-osx-mac.html

http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPInternational/Articles/LocalizingPathnames.html

tagged by
comments powered by Disqus