mac os x:获取本地化路径

时间:2017-09-19 20:25:34

标签: objective-c macos

我想在Mac OS X上检索路径的本地化名称。 我从各种来源拼凑了下面的代码。

我的Mac目前设置为法语语言环境,将法语设置为主要语言,重新启动,我将终端中的LANG环境变量重置为fr_FR.UTF-8,但我似乎无法获取文件夹的本地化路径(例如/ Users / bll / Music)。区域设置似乎正在工作,本地化名称可以 出现在发现者(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 ("/%s\n", [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

1 个答案:

答案 0 :(得分:1)

如评论中所述,本地化名称仅适用于向用户显示。你不应该把它用于其他任何事情。

其次,显示路径是连接路径上每个项目的显示名称的结果。如果您需要显示路径,则应使用-[NSFileManager componentsToDisplayForPath:]。请注意,这为您提供了一系列显示组件。

将这些与斜杠(/)字符连接起来以组成伪路径是不合适的。这部分是因为显示名称可以包含斜杠,这与Unix级路径组件不同。 (在磁盘上,这些将存储为冒号(:)。)显示组件应显示为单独的组件(如显示当前位置的弹出菜单,大纲类型列表或NSPathControl) 。如果必须在一行中显示路径,我将使用图形元素分隔组件,例如右指向三角形图像(或从右向左语言向左指向)。

要允许您的工具从区域框架中检索本地化字符串,它不支持&#34;,您需要1)在__TEXT,__info_plist中嵌入Info.plist部分; 2)包含CFBundleAllowMixedLocalizations键,映射到布尔值true。要嵌入Info.plist文件,请使用编译器选项-Wl,-sectcreate,__TEXT,__info_plist,Info.plist

相关问题