CMake使用本地化生成xcode项目

时间:2015-04-08 14:18:59

标签: objective-c xcode macos localization cmake

我们正在使用cMake作为创建Xcode项目的工具来开发我们的OSX项目。

然而,事实证明我们现在需要一些本地化,我们需要英语和德语.xib文件(或.strings来生成它们,这不是重要的一点)。

我们将文件放在正确的位置并正确创建,但是当cMake生成项目时,文件将作为两个完全独立且独立的文件插入到Xcode项目中,例如:

Foo.xib Foo.xib

而不是两个"子文件"同名:

Foo.xib - Foo.xib(英文) - Foo.xib(德语)

如果我将en.lproj和sv.lproj中的xib直接拖放到项目资源管理器中的resources文件夹中: Xcode会自动检测到这是同一UI的某些不同语言,因此语言会自动添加到项目设置中。 此外,xibs还在项目资源管理器中获得了一个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包有效?

2 个答案:

答案 0 :(得分:2)

我们自己就是这么做的。不幸的是,解决方案并不漂亮。我最终使用mod_pbxproj编写自己的python脚本,在cmake生成后修改xcode项目。如果您可以使用常规xcode项目而不是生成cmake项目,我认为您会更好。你要做的就是让XCode将一组文件识别为本地化非常复杂。

答案 1 :(得分:0)

您可以在此处找到处理 Xcode 项目的 xib 文件的示例:https://github.com/open-eid/updater/blob/master/CMakeLists.txt

总结:可以在结果 MACOSX_PACKAGE_LOCATION 上使用自定义命令 + 设置 nib 属性:

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 )