Smartling-framework 1.4.6

Smartling-framework 1.4.6

测试已测试
Lang语言 Obj-CObjective C
许可证 商业
发布最新发布2017年8月

Emilien Huet 维护。



先决条件

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

在 Xcode 文件资源管理器中选择项目文件,进入项目设置。选择项目本身,而不是您的目标之一。在本地化部分,勾选 使用基础国际化 复选框。

我们建议您将您想要的应用程序翻译成的所有语言添加到语言列表中。但是,您不需要为每个界面构建器文件(Storyboard,XIB)启用本地化。字符串将从中提取并在运行时由 Smartling SDK 进行本地化。

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

将字符串导入 Smartling

手动

您可以手动将项目的 .strings 文件上传到 Smartling 控板,以使字符串可用于翻译人员。您可以使用 Apple 的 genstrings 命令行工具从代码中提取所有字符串到 Localizable.strings 文件中。对于包含在界面构建器文件中的本地化字符串,您可以使用 ibtool 命令行工具完成此操作。

自动

Smartling 提供一个 Ruby gem 来自动提取字符串并将它们上传到仪表板。使用以下命令安装它:

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的用户设备上的应用大小。它只作为静态库提供。

(在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 'Smartling'
end

动态框架

如果以下条件之一适用于您的应用,请选择我们的动态框架

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

在您的项目podfile中,添加如下所示的Smartling-framework pod。

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

target 'MyApp' do
    use_frameworks!
    pod 'Smartling-framework'
end

2. 初始化库

Objective-C

在您的应用的主.m文件中,导入库并调用如下所示的方法

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <Smartling/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文件中,导入库并调用如下所示的方法

import UIKit
import Smartling

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

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

3. 检查您的构建设置

进入项目构建设置并查找其他链接器标志。请确保-ObjC标志存在或将其添加。

MDN-only库

在您的项目podfile中添加如下所示的Smartling pod。

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

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

在您的应用的主.m文件中,导入库并调用如下所示的方法

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <Smartling-MDN/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] 获取应用的主要窗口,或从 View Controller 使用 self.view.window 获取。

应用内审阅和上下文捕获

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

要在此组合模式下构建应用,请在 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: andCompletion:^(BOOL success){...}]。完成块将在UI完全更新为选定区域文本后调用。

复数

要使用复数规则进行字符串本地化,请使用pluralizedStringWithKey:value:方法代替NSLocalizedString,如下所示

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