Smartling-MDN 1.4.6

Smartling-MDN 1.4.6

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

Emilien Huet 维护。



先决条件

确保您的 Xcode 项目已配置为使用基本国际化。

在 Xcode 文件浏览器中选择项目文件,进入项目设置。选择项目本身,而不是一个目标。在本地化部分,勾选“使用基本国际化”复选框。

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

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

将您的字符串导入 Smartling

手动

您可以将项目的 `.strings` 文件手动上传到 Smartling 控制台,以便翻译人员能够访问您的字符串。您可以使用 Apple 的 `genstrings` 命令行工具提取代码中的所有字符串到 Localizable.strings 文件。对于包含在界面构建器文件(故事板,XIB)中的本地化字符串,您可以使用 `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

动态框架

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

  • use_frameworks!选项已经在您的podfile中存在,并且已取消注释。
  • 您应用包含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

在您的应用主函数main.m中导入库,并调用下方所示start方法。

#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中导入库,并调用下方所示start方法。

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仅库

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

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

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

在您的应用主函数main.m中导入库,并调用下方所示start方法。

#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密钥是在您的Smartling账户中启用移动服务时Smartling联系人发送给您的项目AES加密密钥。您不会在该密钥中看到此密钥在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];