OneSky SDK
在线本地化解决方案。
One Sky 管理员实现 iOS 应用的在线本地化。SDK 只需简单地在您的应用中创建 .strings 文件。
您可以在这里观看视频
功能
- Swift 4.1
- Cocoapods
- Xcode 9
要求
- iOS 10.0+
- Xcode 8.0+
安装
CocoaPods
您可以使用 CocoaPods 通过将其添加到您的 Podfile
中来安装 OneSky
。
platform :ios, '10.0'
use_frameworks!
pod 'OneSky', :podspec => '/Users/{yourUser}/{yourProject}/onesky-sdk-ios'
因为这个仓库是私有的,所以我不能完全将其上传到 Cocoapods,但现在它正在使用 Cocoapods。
'/Users/{你的用户名}/{你的项目}/onesky-sdk-ios'
。
下载此项目,了解项目 .podspec 文件所在的路径:这将通过您的本地 .podspec 文件使用 Cocoapods 下载框架。
为了获得全部好处,请导入 OneSky
。
import OneSky
使用示例
使用框架有两种方式。两种情况都需要你实现
fileprivate var localizationManager: OneSkyManager? = OneSkySource()
你应该在 override func viewWillAppear(animated:)
函数中实现本地化,如
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
firstLabel.text = "top".localized
secondLabel.text = "ask".localized
...
}
其中 .localized
扩展是我们框架的特性。
然后
-
带 UI
如果您要使用框架自定义设置UI,那么您需要在按钮处理程序中实现以下代码。
// your Button handler
func buttonPressed() {
localizationManager?.open(from: self, style: .push)
}
此代码实现了打开OneSky自定义UI的委托方法。支持的样式有
- .push - 实现代码
push
展示风格(您的viewController应有navigationController在栈中) - .present - 实现简单的
present
展示风格
userId
,请写下以下代码
如果需要使用// your Button handler
func buttonPressed() {
localizationManager?.open(from: self, style: .push, userId: userId) // where userId: Int value of your user id
}
不需要做任何其他事情。框架将自行处理一切。
-
仅存储端点
如果您只想使用存储端点,以下是一些可用的委托方法的简要指南。
-
weak var delegate: OneSkyDelegate? { get set }
- 实现委托,该委托实现SDK返回的代码中的方法。更多细节可以在代码中的文档中找到。 -
var currentLanguageCode: String? { get }
- 返回当前设备语言地区代码 -
func getAvailableLocales()
- 对通用应用程序配置进行请求。目前使用硬编码的AppId
。 -
func getUserPreferences(with userId: Int)
- 对特定用户的偏好进行请求。 -
func sendUserSettings(with userId: Int, preferences: UserSettings)
- 向上传特定用户偏好的POST请求。也可以用它来创建新用户! -
func translate(locale: Locales)
- 翻译文本并在新的Bundle中保存新的.strings文件。您必须在函数参数中传递Locales
结构。结构应该实现您要翻译的语言。
离线工作
实际上,您的应用程序在编译阶段下载配置文件和地区。为了配置离线模式,您必须
- 在
构建阶段
中添加运行脚本
MYFILE=${SRCROOT}/OneSkyTestApp/Modules/Api/configuration.json
curl -o $MYFILE https://app-api.oneskyhq-stag.com/v1/apps/cfad03c9-0071-4de4-a58c-71a0d4cd9f31 #route
cp "${SRCROOT}/OneSkyTestApp/Modules/Api/configuration.json" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/configuration.json"
其中cfad03c9-0071-4de4-a58c-71a0d4cd9f31
是您的应用ID,而/OneSkyTestApp/Modules/Api/
则是您想要保存配置文件的路径。
- 在
构建阶段
中添加另一脚本
php ./OneSkyTestApp/Modules/API/configuration.php -- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
其中configuration.php
是预先准备好的文件。在您的configuration.php
文件中复制以下代码
<?php
$arg = $argv[2];
echo "arg = " . $arg . "\n";
$json_url = "https://app-api.oneskyhq-stag.com/v1/apps/cfad03c9-0071-4de4-a58c-71a0d4cd9f31";
$json = file_get_contents($json_url);
$data = json_decode($json, TRUE);
$localesArray = array();
$locales = $data['app']['selectors'][0]['locales'];
foreach($locales as $item) {
array_push($localesArray, $item['id']);
}
print_r($localesArray);
# now get string files
$new_url = "https://app-api.oneskyhq-stag.com/v1/apps/cfad03c9-0071-4de4-a58c-71a0d4cd9f31/string-files?fileFormat=ios-strings&languageId=";
foreach($localesArray as $id) {
$url = $new_url . $id;
$data = file_get_contents($url);
echo "data = " . $data . "\n";
file_put_contents($arg . 'Localizable-' . $id . '.strings', $data);
}
?>
其中cfad03c9-0071-4de4-a58c-71a0d4cd9f31
是您的应用ID。这就完成了!