CMake 生成带有本地化的 xcode 项目
Posted
技术标签:
【中文标题】CMake 生成带有本地化的 xcode 项目【英文标题】:CMake generate xcode project with localizations 【发布时间】:2015-04-08 14:18:59 【问题描述】:我们正在使用 cMake 作为创建 Xcode 项目的工具来开发我们的 OSX 项目。
然而,事实证明我们现在需要一些本地化,为此我们需要英语和德语的 .xib 文件(或 .strings 来生成它们,这不是重要的一点)。
我们将文件放在正确的位置并正确创建,但是当 cMake 生成项目时,这些文件作为两个完全独立且独立的文件插入到 Xcode 项目中,例如:
Foo.xib foo.xib
而不是两个同名的“子文件”:
Foo.xib - Foo.xib(英文) - Foo.xib(德语)
如果我将 en.lproj 和 sv.lproj 中的 xib 直接拖放到项目资源管理器中的资源文件夹: Xcode 会自动检测到这是同一 UI 的一些不同语言,因此这些语言会自动添加到项目设置中。 此外,xib 在项目浏览器 3 中有一个 MainMenu.xib 组,由两种语言组成。
我尝试通过 cmake 将本地化的 xib 添加到项目中。它们被添加到资源文件夹中,但不是已识别的本地化,我在项目资源管理器中只得到了两个 xib,三个没有本地化,它们之间没有联系。
如何通过 cmake 生成使本地化工作?
set(CEFCLIENT_RESOURCES_MAC_ENGLISH_LPROJ_SRCS_MACOSX
mac/en.lproj/MainMenu.xib
)
set(CEFCLIENT_RESOURCES_MAC_SWEDISH_LPROJ_SRCS_MACOSX
mac/sv.lproj/MainMenu.xib
)
set(CEFCLIENT_RESOURCES_SRCS
$CEFCLIENT_RESOURCES_MAC_SRCS
$CEFCLIENT_RESOURCES_MAC_ENGLISH_LPROJ_SRCS
$CEFCLIENT_RESOURCES_MAC_SWEDISH_LPROJ_SRCS
$CEFCLIENT_RESOURCES_RES_SRCS
)
有没有办法通过 cmake 生成 Xcode 项目并且 .lproj 包工作?
【问题讨论】:
您找到解决方案了吗?我也在为 I18N 和 L17N 苦苦挣扎。 最终改用我们自己的语言处理,在运行时替换应用中的文本... 你有没有想过使用构建阶段来做到这一点?我写了一个本地化系统来做到这一点。虽然我们的 XIB 本身没有本地化(我们选择通过代码更新需要本地化的字符串)。 @MobileBen 你如何在 CMake 中做到这一点? 【参考方案1】:这是我们自己做的。不幸的是,解决方案并不漂亮。我最终使用mod_pbxproj 编写了我自己的python 脚本来在cmake 生成它之后修改xcode 项目。如果您可以摆脱使用常规 xcode 项目而不是 cmake 生成的项目,我认为您会更好。要让 XCode 将一组文件识别为本地化文件,您必须做的事情非常复杂。
【讨论】:
【参考方案2】:您可以在此处找到为 Xcode 项目处理 xib
文件的示例:https://github.com/open-eid/updater/blob/master/CMakeLists.txt。
总结:可以使用自定义命令 + 在结果 nib
上设置 MACOSX_PACKAGE_LOCATION
属性:
add_custom_command( OUTPUT MainMenu.nib
COMMAND ibtool --errors --warnings --notices --output-format human-readable-text
--compile MainMenu.nib $CMAKE_CURRENT_SOURCE_DIR/mac/en.lproj/MainMenu.xib
)
set_source_files_properties( MainMenu.nib
PROPERTIES MACOSX_PACKAGE_LOCATION Resources/en.lproj )
【讨论】:
以上是关于CMake 生成带有本地化的 xcode 项目的主要内容,如果未能解决你的问题,请参考以下文章
如何让 CMake 创建一个 xcode 项目,其中警告在系统标头中被抑制?