SmartlingMDN 1.5.0

SmartlingMDN 1.5.0

Scott Rossillo 维护。



Bitrise CocoaPods Carthage compatible

先决条件

确保您的 Xcode 项目的设置是使用基础国际化。

在 Xcode 文件资源管理器中选择项目文件。选择项目本身,而不是其中一个目标。在本地化部分,勾选“使用基础国际化”复选框。

我们建议您将您希望应用翻译成所有语言的添加到语言列表中。但是,您不需要在每个 Interface Builder 文件(Storyboard,XIBs)中启用本地化。Smartling SDK 将在运行时从这些文件提取字符串并进行本地化。

在您的代码中,所有面向用户字符串都需要使用宏 NSLocalizedString 进行外部化。这是在 iOS 上本地化应用程序的标准方式,Smartling 只是覆盖了其行为。

将字符串导入 Smartling

手动

您可以将项目中的 .strings 文件手动上传到 Smartling 管理控制台,以便翻译人员可以使用这些字符串。您可以使用 Apple 的 genstrings 命令行工具将所有字符串从您的代码中提取到一个 Localizable.strings 文件中。对于包含在 Interface Builder 文件中的本地化字符串,您可以使用 ibtool 命令行工具实现此目的。

自动

Smartling 提供了一个 Ruby 复件库,可用于自动提取您的字符串并将它们上传到仪表板。使用以下命令通过 RubyGems 安装它:

gem install smartling_xcode

然后运行

smartling_xcode init

系统将提示您输入项目 ID 和 API 密钥,您可以在 Smartling 仪表板中找到这些信息。

在您的 Xcode 项目文件夹中,您现在可以运行

smartling_xcode push

您应用程序的字符串现在可在仪表板上使用。

安装说明

从以下选项中选择符合您需求的 SDK:

  • 完整 Smartling SDK - 完整的 Smartling SDK 具备在应用内审查、上下文捕捉和空气传输服务模式等功能,是满足您所有本地化需求的最便捷解决方案。它作为 静态库(适用于目标 iOS < 8.0 的 Objective-C 应用)或动态框架(适用于 Swift 应用或仅针对 iOS > 8.0 的 Objective-C 应用)提供。它通常会在最终用户的设备上增加约 200Kb。
  • 仅 MDN 静态库 - Smartling SDK 的简化版本,仅包括空气传输服务模式。如果您对应用大小有严格的要求,请选择此选项。它通常会在用户的设备上增加约 65Kb。它仅提供静态库版本。

(应用大小测量是在启用 bitcode 的样本应用的发布构建的 iPhone 7 版本上完成的。结果可能会有所不同。)

完整 Smartling SDK

1. 安装 Smartling 软件包

静态库

如果您的应用是用Objective-C编写且目标iOS < 8.0,请选择我们的静态库。在您的项目中的 podfile 文件中,按照以下示例添加Smartling pod。

source 'https://github.com/CocoaPods/Specs.git'

target 'MyApp' do
	pod 'SmartlingSDK'
end

动态框架

如果您应用符合以下任何一个条件,请选择我们的动态框架

  • use_frameworks! 选项已经在您的podfile中存在并且已取消注释。
  • 您的应用包含Swift代码。
  • 您的应用的目标不是iOS < 8.0。

在您的项目中的podfile文件中,按照以下示例添加Smartling-framework pod。

source 'https://github.com/CocoaPods/Specs.git'

target 'MyApp' do
    use_frameworks!
    pod 'SmartlingFramework'
end

如果您使用Carthage,按照以下示例将SmartlingFramework仓库添加到您的cartfile中。

github "Smartling/ios-lqa-framework"

2. 初始化库

Objective-C

在您的应用的主.m文件中,导入库并按照以下示例调用start方法

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <SmartlingSDK/Smartling.h>

int main(int argc, char * argv[]) {
    @autoreleasepool {
        [Smartling startWithProjectId:@"<Project ID>" andOptions:@{SLLogging : SLLoggingInfo, SLMode: <Mode>}];
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

Swift

在您的应用AppDelegate.swift文件中,导入库并按照以下示例调用start方法

import UIKit
import SmartlingSDK

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    ...

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        SmartlingSDK.start(withProjectId: "<Project ID>", andOptions: [SLLogging: SLLoggingInfo, SLMode: <Mode>])
        return true
    }

3. 检查您的构建设置

转到您项目的构建设置,查找Other linker flags。确保存在-ObjC标志或添加它。

仅MDN库

在你的项目的 podfile 文件中,按如下所示添加 Smartling pod。

source 'https://github.com/CocoaPods/Specs.git'

target 'MyApp' do
	pod 'Smartling-MDN'
end

在您的应用的主.m文件中,导入库并按照以下示例调用start方法

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <SmartlingMDN/SmartlingMDN.h>

int main(int argc, char * argv[]) {
    @autoreleasepool {
        [SmartlingMDN startWithProjectId:@"<Project ID>" OTAKey:@"<OTA key>" andOptions:@{SLLogging: SLLoggingInfo}];
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

OTA密钥是项目用于OTA更新的AES密钥,它已在您在Smartling账户中启用移动服务时由您的Smartling联系人发送给您。您将在Smartling仪表板上找不到此密钥。

最后,进入项目的构建设置,查找 其他链接器标志。请确保存在 -ObjC 标志,或者添加它。

模式(仅限全Smartling SDK)

OTA服务

在OTA服务模式下,发布的字符串以用户的语言形式提供给最终用户,并在应用中显示。有关如何使用OTA服务,请参阅使用指南

要在OTA服务模式下构建应用程序

  • 使用 SLMode: SLOTAServing
  • 添加 SLOTAKey 选项,使用您项目用于OTA更新的AES密钥。OTA密钥已在您在Smartling账户中启用移动服务时由您的Smartling联系人发送给您。您将在Smartling仪表板上找不到此密钥。

应用内审查

应用内审查模式允许您的团队成员登录并编辑字符串,在应用内上下文中进行审查。有关如何使用应用内审查的信息,请参阅使用指南

要在应用内审查模式下构建应用程序,请在Smartling启动方法中使用 SLMode: SLInAppReview

上下文捕获

使用上下文捕获模式,用户可以在运行应用程序时交互式地创建截图。有关如何使用上下文捕获的信息,请参阅使用指南

要在上下文捕获模式下构建应用程序

  • 在Smartling启动方法中使用SLMode: SLContextCapture
  • 从Smartling仪表板生成API v2令牌。使用SLAPIUserIdSLAPIUserSecret选项传递用户ID和密码。

自动上下文捕获

您可以使用Xcode UI测试来自动化您的上下文捕获。

您的应用需要以上下文捕获模式启动。将以下方法添加到您应用的UI测试中,并在需要触发屏幕捕获的地方调用它

+ (void)triggerContextCapture {
    XCUIApplication *app = [[XCUIApplication alloc] init];
    XCUIElement *window = [app.windows elementBoundByIndex:0];
    XCUICoordinate *origin = [window coordinateWithNormalizedOffset:CGVectorMake(0.0, 0.0)];
    XCUICoordinate *triggerCoord = [origin coordinateWithOffset:CGVectorMake(100, 100)];
    [triggerCoord pressForDuration:5.0];
}

您还可以通过调用以下方法直接从您的应用代码中触发屏幕截图

[Smartling captureWindow:<UIWindow> withCompletion:^(NSError *error) {
    // Error handling
}];

您可以通过调用[[UIApplication sharedApplication] keyWindow]获取您应用的主窗口,或者通过self.view.window从View Controller获取。

应用内审查和上下文捕获

此模式与内置审查模式相同,但在操作菜单中添加了额外的选项,允许用户在应用内切换到上下文捕获模式。这样,他们可以使用单一构建的一个应用访问两种模式。

要构建此组合模式的应用,请在Smartling启动方法中使用SLMode: SLInAppReviewAndContextCapture,并参考上述“自动上下文捕获”部分中描述的将API v2令牌包括在内。

禁用

您可以将Smartling库留在您的项目中,但不完全禁用其功能,可以通过省略启动方法或以SLMode: SLDisabled选项调用它来完成。

附加选项

SLLogging

定义SDK输出到控制台日志级别。

  • SLLoggingNone(默认)
  • SLLoggingInfo
  • SLLoggingDebug

运行时更改区域设置(仅限完整Smartling SDK)

在OTA服务模式下,如果您想允许用户在应用内更改他们的区域设置,Smartling可以帮助您非常容易地实现这一目标。

  • 从Smartling仪表板生成API v2令牌。使用Smartling启动选项SLAPIUserIdSLAPIUserSecret传递用户ID和密钥。
  • SLAllowLocaleChange选项设置为@YES。可选地,您可以使用SLForceLocale在启动时强制设置区域,例如,如果您正在保存用户的选择。如果您不设置此选项,则将使用设备区域。
  • 要显示用户可用的区域设置列表,Smartling允许您请求应用程序项目可用的区域设置列表。调用方法[Smartling getProjectLocalesWithCompletion:^(NSArray *locales, NSError *error){...}],完成块将为您提供包含区域名称和区域ID的区域设置数组。
  • 当用户选择了一个区域时,您可以使用方法[Smartling setLocaleWithId:<NSString *localeId> andCompletion:^(BOOL success){...}]来设置它。完成块将在UI完全更新为所选区域的文本后调用。

复数

要使用复数规则本地化字符串,请使用pluralizedStringWithKey:value:方法而不是NSLocalizedString,如下所示

NSNumber *value = @(5);
label.text = [NSString stringWithFormat:[Smartling pluralizedStringWithKey:@"<key>" value:value], value];