iOS集成crowdin

817 阅读5分钟

SDK的github地址:github.com/crowdin/mob…

SDK有两种集成方式,一种包含基本CDN分发翻译功能,不需要在App Store上发布新版本,就能获得最新的翻译;另一种除此之外还包含即时预览和截屏功能,便于为翻译人员提供翻译的上下文环境。

一、基本功能集成

1.通过pod方式集成,在podfile中添加以下代码,然后执行pod install

  pod 'CrowdinSDK'  pod 'Starscream', '~> 4.0.0'

2.如果项目包含App Extensions,例如小组件或者其他APP扩展,pod install时会报以下错误

'shared' (Swift) / 'sharedApplication' (Objective-C) is unavailable: not available 
on iOS (App Extension) - Use view controller based solutions where appropriate 
instead.zz

需要添加以下pod脚本来解决,然后运行pod install

post_install do |installer|
  extension_api_exclude_pods = ['CrowdinSDK']
  installer.pods_project.targets.each do |target|

      # the Pods contained into the `extension_api_exclude_pods` array
      # have to get the value (APPLICATION_EXTENSION_API_ONLY) set to NO
      # in order to work with service extensions

      if extension_api_exclude_pods.include? target.name
        target.build_configurations.each do |config|
          config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
        end
      end
    end
end

3.通过Swift Package Manager集成,支持版本为1.4.0

dependencies: [
    .package(url: "https://github.com/crowdin/mobile-sdk-ios.git", from:"1.4.0")
]

二、配置资源

  1. 上传strings/stringsdict本地换文件到Crowdin,如果已经有响应的翻译文件,也可以上传
  2. 在crowdin中设置Distribution
  3. 配置SDK,打开Over-The-Air Content Delivery功能

Distribution 是一个CDN源站,它负责映射项目的翻译内容,集成iOSAPP时需要用它。在项目的Over-The-Air Content Delivery中管理Distribution,需要用多少个就可以创建多少个,每个都可以选择不同的文件。需要发送新的翻译时,点击Release按钮。

  1. 在crowdin项目中打开Over-The-Air Content Delivery功能,APP可以从CDN源站拉取翻译
  2. 在APPDelegate或者Info.plist中初始化SDK

注意

  • CDN功能不会更新项目localization文件,如果想在localization文件增加新的翻译,需要自己做
  • SDK接收到翻译后,会将它存到app的文件中,用于后续会话,以减少下次app启动时的请求。存储时间可以通过个_intervalUpdatesEnabled_参数设置
  • CDN将所有release的翻译缓存下来大概长达15分总,在crowdin中发布新的翻译后,CDN可能延迟返回它。

三、配置APPDelegate

  • swift版本、oc版本通过APPDelegate配置。
  • 通过Info.plist配置
  • swiftUI配置

详见:github.com/crowdin/mob…

四、高级功能

1.即使展示,在crowdin中编辑的翻译即时展示在APP中,可以查看已经完成的和正在输入的翻译。

2.APP的截屏附带标记的字符串自动上传发送到crowdin项目中,为翻译人员提供详细的上下文环境

详见:github.com/crowdin/mob…

注意

  1. 配置翻译更新间隔 默认每次app启动后SDK每15分钟查询一次新的翻译,你可以定义每多少分钟在app中更新翻译,使用这个功能,需要在pod中添加CrowdinSDK/IntervalUpdate,

    pod 'CrowdinSDK/IntervalUpdate'.
    

 在CrowdinSDKConfig中配置这个选项

with(intervalUpdatesEnabled: true, interval: {interval})

2.R-Swift的app也支持Crowdin iOS SDK

3.不管设备的本地化,动态修改SDK的目标语言使用下面的方式

CrowdinSDK.enableSDKLocalization(true, localization: “<language_code>”)

<language_code> -  在ISO 639-1 格式中目标语言的代码.

4.目前,iOS SDK不支持Language Mapping

5. iOS SDK通过悬浮设置按钮模式提供详细的调试模式-"Logs" tab,并在xcode控制台中打印。要使用控制台打印,CrowdinSDKConfig中添加下面选项

.with(debugEnabled: true)

6.日志回调。Crowdin SDK收集SDK活动产生的所有信息(登录、退出、下载语言、API调用)。每次有新的日志产生的时候这个回调返回日志文本。要订阅日志信息,只要添加一个新的下面回调

CrowdinSDK.setOnLogCallback { logMessage in
   print("LOG MESSAGE - \(logMessage)")
}

五、iOS和安卓APP集成方案

1.在一个project中维护两份文件,一份是iOS的strings格式源文件,另一份是安卓的XML源文件。

因为两份文件的key和value几乎一致,借助平台的Hide Duplicates功能,会识别value一致的字段,只需要翻译一份文件就可以,提高效率。同时,平台的Unify Placeholders功能,解决了iOS和安卓占位符(%@和%s)的识别问题,减少了翻译工作量。

2.通过两个project分别维护iOS和安卓的源文件。

通过平台的Share TMs功能可以自动预翻译另一个project中相同的source string,简化翻译工作。

六、翻译版本迭代和管理

使用GitLab操作了crowdin文件的版本控制如下图:

crowdin会根据配置去gitlab仓库里的指定分支抓取指定文件作为源文件,并且自动将翻译后的文件以配置设置中的名称提交到仓库中,但不会提交到指定分支,而是新创建的分支,分支名称根据配置中的设置确定。

当有新的翻译时,更新仓库的指定分支中的指定源文件,提交后,在上面第二张图中点击SYNC NOW,crowdin会从仓库中拉取新的源文件,在上面第三张图中对应的源文件就会更新,对其新增的字段完成翻译后,再点击SYNC NOW按钮,crowdin会再次在仓库中生成新的分支,包含新翻译好的文件。

翻译完成后,可以选择第三张图中新的分支生成distribution,替换APP项目中的hash值,进行测试,测试完成没有问题后,在仓库中,将更新的分支合并到主分支中,然后点击SYNC NOW,主分支对应的crowdin源文件就会包含新增的翻译字段了,此时将原来的distribution重新Release,就可以在项目中使用原来distribution对应的hash值了。

注意,crowdin只会在第一次设置gitlab集成的时候拉取仓库中的翻译,以后,crowdin会默认yic2rowdin中的翻译为主,所以不会再去获取仓库中的翻译。