gpt4 book ai didi

iphone - iOS如何本地化模块中的文件

转载 作者:行者123 更新时间:2023-12-01 17:43:30 25 4
gpt4 key购买 nike

我有一个实现我们都知道和喜爱的“拍照/从库中选择”的类。在这里https://github.com/fulldecent/FDTake这通过 git submodule 包含在我的其他项目中,并且工作正常。

现在我需要把那个课上的文字翻译成中文,比如“拉取/选照片”之类的。有没有好办法把翻译放在那里让每个人都可以使用它们?

最佳答案

本地化通常由 NSLocalizedString(<#key#>, <#comment#>) 处理。宏。在源代码中,您将所有硬编码字符串替换为宏。例如:

    [self.buttonTitles addObject:@"Hi"]; // hard coded greeting


    [self.theLabel setText:(NSLocalizedString(@"theKey", @"Hi"))];

然后 genstrings (从终端内部)用于扫描实现文件(*.m)并将其输出写入语言项目文件夹(此处:en.lproj)
    $ genstrings -o en.lproj/ *.m

在目录 en.lproj/一个名为 Localizable.strings 的文件.其内容将是:
/* Hi */
"theKey" = "theKey";

评论 /* Hi */取自我们的源代码。字符串 Hi应该显示给(讲英语的)用户。所以我们需要编辑等号右边的字符串,让它成为问候语, = "theKey"必须变成 = "Hi" :
/* Hi */
"theKey" = "Hi!";

到现在为止还挺好

如果只有几个字符串或不打算修改字符串,这一切都很好。再次运行 gestrings 时,它将覆盖修改,您实际上会丢失在 Localizable.strings 中完成的工作。 .
一个想法可能是将 genstrings 的输出写入不同的位置。但随后您将不得不手动合并更改。一旦 Localizable.strings文件越来越大,试图保留源代码和 Localizable.strings 成为一场噩梦同步中。所以让我们尽量避免这种情况。

使用 NSLocalizedStringWithDefaultValue(<#key#>, <#tbl#>, <#bundle#>, <#val#>, <#comment#>) 可以提供很大帮助.该宏允许在 Localizable.strings 中设置默认值。文件,此外,它将不再需要对值字段进行初始编辑。

把它放在一起:
[self.theLabel setText:NSLocalizedStringWithDefaultValue(@"theKey2", @"Localizable", [NSBundle mainBundle], @"Hi!", @"informal greeting"))];

运行 genstrings 后上面使用的命令现在在 Localizable.strings 中有一点不同。
/* informal greeting */
"theKey2" = "Hi!";

除了现在告诉译者我们需要非正式问候的评论外, “Hi!”已存在于值字段中。无需进入 Localizable.strings 文件,搜索正确的行,将字段形式“theKey”修改为“Hi!”。 genstrings根据 NSLocalizedStringWithDefaultValue 提供的默认值为我们做这件事。

添加文件 Localizable.strings到 xcode 项目。

做翻译

更改源代码后,对于 Xcode 内部的新语言,首先将本地化添加到 Localizable.strings . Xcode 将生成 Localizable.strings 的副本在基于原始 Localizable.strings 的子文件夹下.

我个人不会说中文,但会说德语。因此,如果添加德语本地化,我的翻译将位于 de.lproj/Localizable.strings , 意大利语下 it.lproj/等等。

编辑新的 Localizable.strings如所须:

(德语)
/* informal greeting */
"theKey2" = "Hallo!";

(意大利语)
/* informal greeting */
"theKey2" = "Ciao!";

然后构建并运行。
********* begin edit
捆绑起来

以上考虑了一个“标准”的xcode项目。您正在询问创建一个模块,因此允许您的代码成为项目的补充。我建议您创建一个包含本地化的捆绑包。当有人将您的代码包含到他们的项目中时,本地化仍然是分开的。
关于捆绑包的完整文档是 here .

使用捆绑包进行本地化的项目是 QuincyKit (可能还有更多,这是第一个想到的)

因此,当将本地化放入 mainBundle 以外的捆绑包中时 [NSBundle mainBundle]在下面的行中必须改变
    [self.theLabel setText:NSLocalizedStringWithDefaultValue(@"theKey2", @"Localizable", [NSBundle mainBundle], @"Hi!", @"informal greeting"))];

不要从 mainBundle 中获取字符串,而是获取对您自己的模块的引用。文档建议:
    NSBundle* myBundle = [NSBundle bundleForClass:[self class]];

所以这条线变成了:
    [self.theLabel setText:NSLocalizedStringWithDefaultValue(@"theKey2", @"Localizable", myBundle, @"Hi!", @"informal greeting"))];
********* end edit
PS: : my original text can be seen here

关于iphone - iOS如何本地化模块中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com