Smartling 1.4.6

Smartling 1.4.6

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

Emilien Huet 维护。



Smartling 1.4.6

先决条件

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

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

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

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

将您的字符串导入 Smartling

手动

您可以手动将项目的 .strings 文件上传到 Smartling 控制台,以便使字符串可用于翻译人员。您可以使用 Apple 的 genstrings 命令行工具提取您代码中的所有字符串到一个 Localizable.strings 文件中。对于包含在界面构建器文件中的本地化字符串,您可以使用 ibtool 命令行工具来处理。

自动

Smartling 提供了一个 Ruby gem 来自动提取您的字符串并将它们上传到控制台。使用以下命令通过 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的空间。它仅作为静态库提供。

(此处标注的应用大小测量是在iPhone 7版本的一个样本应用的发布构建中,且启用了Bitcode的情况下进行的。结果可能会有所不同。)

全Smartling SDK

1. 安装Smartling包

静态库

如果您的应用程序是用Objective-C编写的,并且针对iOS < 8.0,请选择我们的静态库。在您的项目的podfile中添加Smartling依赖项,如下所示。

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

target 'MyApp' do
	pod 'Smartling'
end

动态框架

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

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

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

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. 检查构建设置

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

仅MDN库

在您的项目的podfile中,添加如下所示的Smartling依赖项。

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密钥是您的项目OTA更新的AES密钥,您的Smartling联系人会在您在Smartling帐户中激活移动功能时发送给您。您不会在您的Smartling仪表板中找到此密钥。

最后,转到您的项目构建设置,找到Other linker flags。确保存在-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:<NSString *localeId> andCompletion:^(BOOL success){...}]设置它。完成块将在UI完全更新为所选地域的文本后被调用。

复数

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

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