问题:使用genstrings从项目创建Localizable.strings文件.几个星期后,一些事情发生了变化,我再次运行genstrings.75%的新文件已经在旧文件中.如何将新文件与旧文件合并,以便旧文件包含所有这25%的新键值对?
我使用genstrings正确生成了我的字符串文件.我已经更改了不同语言的本地化字符串.现在,我添加了一些NSLocalizedString()事件,我想在我的所有本地化字符串文件中生成它们.
但是,再次运行genstrings似乎并没有更新我的字符串文件.难道我做错了什么?
我有一个基本的Swift文件Test.swift,其中包含
import Foundation
import UIKit
class Test: NSObject {
let a: String
let b: String
override init() {
a = NSLocalizedString("key 1", tableName: nil,
bundle: NSBundle.mainBundle(), value: "value 1", comment: "comment 1")
b = NSLocalizedString("key 2", comment: "comment 2")
}
}
Run Code Online (Sandbox Code Playgroud)
当我genstrings在这个文件上运行时,我收到一个意外的警告
$ genstrings -u Test.swift
Bad entry in file Test.swift (line = 9): Argument is not a literal string.
Run Code Online (Sandbox Code Playgroud)
并且生成的Localizable.strings文件缺少条目"key 1"
$ cat Localizable.strings
??/* comment 2 */
"key 2" = "key …Run Code Online (Sandbox Code Playgroud) 我是iOS的国际化和本地化的新手.我正在运行genstrings:
find . -name \*.m | xargs genstrings -o en.lproj生成我的Localizable.strings文件.它按字母顺序(按键)构建文件.
为了便于翻译,我希望键和值按照它们在.m文件中的出现顺序排序.这可能与genstrings?我在其man页面上找不到相关信息.
我在网上和这里搜索了这个错误.在线它显示我的结果使用不同的语言然后英语很好谷歌.这里有一个帖子和一个从未真正回答过这个问题的家伙.
我的桌面上有我的xcode项目文件夹.在项目文件夹中,我有一个en.lproj文件夹,里面有iPad和iPhone故事板以及localization.plist文件.但是当我在Xcode中启动项目时,无法找到这个en.lproj文件夹.那么这可能是问题所在?
使用我桌面上的项目文件夹,我启动终端输入:cd
然后将我的项目文件夹拖到终端,它给我路径.然后我将这行代码粘贴到终端中
找 .-name*.m | xargs genstrings -o en.lproj
我在终端中收到此错误消息:
genstrings:无法连接到输出目录en.lproj
它多次打印这行,然后说我的项目是一个目录的路径?
没有.strings文件.对我做错了什么的想法?我得到了UILabels,我从Storyboard中拖放,但我也是用编码的字符串
NSLocalizedString(@"First Level Passed",@"这是屏幕上显示的一条消息,允许用户知道他们已经通过了第一级!");
那么上面的终端代码片段应该找到那些NSLocalizedStrings吧?我认为它首先找不到en.lproj文件夹,但我不知道?
任何帮助都会很棒.
iOS用于创建本地化字符串的宏在使用时非常棒genstrings.但是,我想在其中一个宏之上创建自己的#define,如下所示:
#define MyLocalizedStringWithDefaultValue(key, tbl, val, comment) \
NSLocalizedStringWithDefaultValue(key, tbl, [NSBundle mainBundle], val, comment)
#endif
Run Code Online (Sandbox Code Playgroud)
基本上,我总是想要反对主捆绑,所以我觉得不需要每次都输入它.这在代码中工作得很好,但是genstrings没有拿起我的宏.有什么我可以做的,让它拿起我的自定义宏?我在手册页上看到,有一个常规参数,看起来像我正在尝试做的,但我无法让它工作.
我认为这是一个genstrings错误或“功能”,但想看看是否有人遇到过这个问题或知道答案。我正计划为此打开一个雷达。
我们使用我们自己的本地化宏。让我们称之为CustomLocalizedString。在我们的代码库中,它非常大,我们使用了很多 3rd Party 库。对于绝大多数 3rd Party 库,如果它们碰巧拥有任何本地化字符串,我们不想要它们。当我们确实想使用他们的本地化字符串时,我们修改 3rd Party lib 以使用我们的CustomLocalizedString宏。由于我们不关心的字符串正在使用NSLocalizedString*宏,因此我们认为这不是问题。
本地化基本上开始标记一些有问题的字符串。经过一番研究,我意识到它来自 3rd Party lib。然后我进一步意识到我们还包括了其他不应该存在的字符串(我们有大量的字符串)。这些是使用NSLocalizedString*marco 的字符串。
所以我们的调用genstrings是这样的:
genstrings -o output -s CustomLocalizedString
我实际上使用xargs和find创建文件参数,因此为简洁起见,我省略了那部分。根据输出,它看起来像是genstrings将NSLocalizedString和CustomLocalizedString字符串都放入 Localizable.strings 文件中。
为了进一步验证我创建了一个文件:
NSLocalizedString(@"Normal localized string macro", nil);
CustomLocalizedString(@"Custom localized string macro", nil);
Run Code Online (Sandbox Code Playgroud)
并跑了:
genstrings -o out -s CustomLocalizedString localized_string.txt
Run Code Online (Sandbox Code Playgroud)
输出是:
/* No comment provided by engineer. */
"Custom localized string macro" = "Custom …Run Code Online (Sandbox Code Playgroud) 我正在尝试准备我的应用程序以传递给翻译人员进行本地化,但我遇到了一些问题.我将文件"Localizable.strings"添加到我的项目中,并选中了"Use Base Internationalization".
然而,看看我在Xcode中的应用程序,我没有看到任何语言的"Base.lproj"或"en.lproj"或.lproj文件,但是当我在Finder中打开我的应用程序时,我可以看到"en.lproj" "和"es.lproj"文件夹.
我猜这可能是genstrings实用程序对我不能正常工作的原因.我的代码中有很多调用self.navigationItem.title = NSLocalizedString(...),但是当我执行时genstrings *.swift,Localizable.strings没有任何变化,我仍然看不到任何.lproj文件夹.
在我的“ViewController.swift”中,我有一个本地化的字符串:
TheOutLabel.text = NSLocalizedString("hello", comment: "The \"hello\" word")
Run Code Online (Sandbox Code Playgroud)
在终端中,为了生成“Localizable.strings”文件,我输入:
cd Base.lproj/; genstrings ../*.swift; cat Localizable.strings
Run Code Online (Sandbox Code Playgroud)
并得到以下结果:
??/* The \"hello\" word */
"hello" = "hello";
Run Code Online (Sandbox Code Playgroud)
打字时od -c Localizable.strings,我得到:
0000000 377 376 / \0 * \0 \0 T \0 h \0 e \0 \0
0000020 \ \0 " \0 h \0 e \0 l \0 l \0 o \0 \ \0
0000040 " \0 \0 w \0 o \0 r \0 d \0 \0 * \0
0000060 / \0 \n …Run Code Online (Sandbox Code Playgroud) 在我的源代码中,我有一些像NSLocalizedStringFromTable(@"Info", @"en", @"Title of this view").当我随后调用时,genstrings -o en.lproj ./Classes/*.m我不会得到预期的文件,en.strings但是Localized.strings,尽管我在genstrings-manpage中读到它会从NSLocalizedStringFromTable(a,table,c)函数生成一个table.strings文件.我错了吗?我如何创建table.strings文件呢?
genstrings ×10
localization ×7
ios ×6
iphone ×3
swift ×3
xcode ×3
cocoa-touch ×1
objective-c ×1
terminal ×1
unicode ×1