我想检索Mac OS X上的路径的本地化名称。我从各种来源拼凑了下面的代码。
我的Mac当前设置为法国语言环境,将法语设置为主要语言,重新启动,我将终端中的lang环境变量重置为fr_fr.utf-8,但我似乎无法获得该文件夹的本地化路径(例如/用户/bll/音乐)。语言环境似乎在起作用,本地名称确实出现在Finder(Musique)中。
我在这里缺少什么?
(我不是MAC程序员,不是客观的编程器,不要说法语)。
编辑:使用当前代码,info.plist文件
更新(我确实了解带有/字符嵌入的显示名称的问题,只是目前不必担心)。
代码:
#import "Foundation/NSObject.h"
#import "Foundation/NSFileManager.h"
#import "Foundation/NSProcessInfo.h"
#include <stdio.h>
#include <stdlib.h>
#include <MacTypes.h>
int
main (int argc, const char * argv[])
{
NSFileManager *fm = [NSFileManager defaultManager];
NSString *path = @"";;
NSString *npath = @"";
NSArray *npathcomp;
NSUInteger count;
if (argc > 1) {
NSArray *arguments = [[NSProcessInfo processInfo] arguments];
path = arguments[1];
npath = path;
if (*argv[1] == '/') {
npathcomp = [fm componentsToDisplayForPath:path];
count = npathcomp.count - 1;
npath = [[npathcomp subarrayWithRange:NSMakeRange (1,count)]
componentsJoinedByString:@"/"];
}
}
printf ("/%sn", [npath UTF8String]);
return 0;
}
info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleAllowMixedLocalizations</key>
<true/>
<key>CFBundleDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDisplayName</key>
<string>localizeddirname</string>
<key>CFBundleExecutable</key>
<string>localizeddirname</string>
<key>CFBundleGetInfoString</key>
<string>Copyright 2017 Brad Lanam, Walnut Creek CA USA</string>
<key>CFBundleIdentifier</key>
<string>org.bdj.localizeddirname</string>
<key>CFBundleName</key>
<string>localizedirname</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>LSMinimumSystemVersion</key>
<string>10.6.0</string>
</dict>
</plist>
汇编:
cp -p localizeddirname.plist Info.plist
clang
-v
-mmacosx-version-min=10.9
-framework Cocoa
-o localizeddirname
-Wl,-sectcreate,__TEXT,__info_plist,Info.plist
localizeddirname.m
rm -f Info.plist
如注释中所述,本地化名称仅适用于用户显示。您不应该将其用于其他任何东西。
第二,显示路径是不是串联路径上每个项目的显示名称的结果。如果需要显示路径,则应使用-[NSFileManager componentsToDisplayForPath:]
。请注意,这为您提供了一系列显示组件。
将它们与斜线(/)字符相连以组成伪路径是不合适的。这部分是因为显示名称可以包含斜线,这与Unix级路径组件不同。(在磁盘上,将其存储为结肠(:)。)显示组件应显示为单独的组件(例如在弹出菜单中显示当前位置,轮廓类型列表或NSPathControl
)。如果您必须在一行中显示路径,我将用图形元素将组件分开,例如正确的三角形映像(或右至左语言的左点)。
要允许您的工具从框架的框架中检索本地字符串,它不"支持",您需要1)将信息嵌入 __TEXT,__info_plist
部分中;2)包括CFBundleAllowMixedLocalizations
键,映射到布尔值True。要嵌入info.plist文件,请使用编译器选项-Wl,-sectcreate,__TEXT,__info_plist,Info.plist
。