谷歌工作表的非认证认证url刮刀
googlesheettranslate的Python项目详细描述
概述
sheet-localization
从单个Google电子表格生成Android/iOS本地化文件。在
命令行参数
您通常是这样运行sheet-localization
:
python /path/to/sheet-localization/main.py /path/to/account_credentials.json SpreadSheetName TargetName
- 在
在account_credentials.json
是注册Google服务帐户后获得的文件 - 在
SpreadSheetName
是要打开的电子表格的名称Note:必须授予Google服务帐户访问电子表格的读取权限 通过与服务帐户的电子邮件共享文档
在 - 在
在TargetName
可以是android
、ios
或{}之一。在
目标
android
目标
sheet-localization
在当前目录中生成res/value-<lang>/strings.xml
层次结构。在
ios
目标
sheet-localization
在当前目录中生成<lang>.lproj/Localizable.strings
层次结构。在
该脚本还生成LocalizationConstants.h
,LocalizationConstants.m
文件
转换常量。在
ios-swift
目标
sheet-localization
在当前目录中生成<lang>.lproj/Localizable.strings
层次结构。在
该脚本还生成带有转换常量的LocalizationConstants.swift
文件
(实际上,枚举)。在
安装
这些脚本需要Python 2.7+。在
iOS生成在python3+中不起作用
- 在
Linux系统 托多
在 - 在
窗口 托多
在 - 在
马科斯
- 在
升级
six
包
在sudo easy_install -U six
- 在
安装
pip
包管理器
在sudo easy_install pip
- 在
安装
gspread
和oauth2client
包
在sudo -H pip install --upgrade gspread oauth2client
- 在
分步指南
1。克隆示例Google电子表格
将sample spreadsheet克隆到你的Google驱动器。在
示例文档包含两个必选页:
SRC
包含翻译和密钥CFG
包含键所在的配置以及行转换的起始位置
这些页面是脚本所必需的,所以一定要保留它们。在
2。创建新的googleapi项目
转到Google API console并创建一个新项目。在
3。启用Google Drive API
启用Google Drive API。在
4。创建服务帐户
为Web server
创建服务帐户凭据以访问Application data
命名服务帐户并赋予它Project -> Editor
角色。在
创建帐户后,您应该获得一个特殊的JSON,它包含所有必需的凭证。在
5。允许服务帐户读取电子表格文档
您下载的JSON如下所示:
{
"type": "service_account",
"project_id": "localization-173405",
"private_key_id": "d37cdb95af7f817a05c",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCO8ACoDvAG0q8R\xg3bQzHYCVrEDBcBFkfJ4d8dfy9FdIS++p3XvmLOWnFyMreQTPh1\njmx7jdmDpEwZHNZrj2dYYf0Xta8A0wxdejqUmNq4CyOBqTzomqCdzu36qBp8szUk\nN1l9G9u+rLcm9J/BlinOeA==\n-----END PRIVATE KEY-----\n",
"client_email": "localization@localization-173405.iam.gserviceaccount.com",
"client_id": "1016040",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/localization%40localization-173405.iam.gserviceaccount.com"
}
要允许服务帐户读取您的电子表格,您需要提供client email
对文档的读取权限。您可以在“共享设置”中执行此操作。在
6。生成Android本地化文件
转到您选择的目录并 使用以下命令生成Android本地化文件:
cd /path/to/android/project
python /path/to/sheet-localization/main.py /path/to/service_account_credentials.json 'Spreadsheet Key' android
这将创建res/values-<lang>/strings.xml
文件,其内容如下:
7。生成iOS本地化文件
转到您选择的目录并 使用以下命令生成iOS本地化文件:
cd /path/to/android/project
python /path/to/sheet-localization/main.py /path/to/service_account_credentials.json 'Spreadsheet Key' ios
这就产生了
<lang>.lproj/Localizable.strings
包含以下内容的文件:
在"Menu.Item.History" = "History"; "Menu.Item.Notifications" = "Notifications"; "Menu.Item.Favourites" = "Favourite places"; "Menu.Item.About" = "About"; "Profile.Email.Title" = "Email"; "Profile.BirthDate.Title" = "Birth date"; "Profile.ChangeAvatar.Title" = "Another photo"; "Order.Address.Here" = "I'm here"; "Details.Order" = "Order";
LocalizationConstants.h
包含以下内容的文件:
在/*! * @b en@: History * @b ru@: История * @b uk@: Історія */ extern NSString * const trMenuItemHistory; /*! * @b en@: Notifications * @b ru@: Уведомления * @b uk@: Сповіщення */ extern NSString * const trMenuItemNotifications;
LocalizationConstants.m
包含以下内容的文件:
在import "LocalizableConstants.h" NSString * const trMenuItemHistory = @"Menu.Item.History"; NSString * const trMenuItemNotifications = @"Menu.Item.Notifications"; NSString * const trMenuItemFavourites = @"Menu.Item.Favourites"; NSString * const trMenuItemAbout = @"Menu.Item.About"; NSString * const trProfilePhoneTitle = @"Profile.Phone.Title"; NSString * const trProfileEmailTitle = @"Profile.Email.Title";
本地化常量有助于防止字符串输入错误。在
8。为Swift生成iOS本地化文件
如果使用ios-swift
目标,则得到单个LocalizationConstants.swift
,
看起来像这样:
import Foundation
enum L10n {
case MenuItemHistory
case MenuItemNotifications
case MenuItemFavourites
case MenuItemAbout
}
extension L10n: CustomStringConvertible {
var description: String { return self.string }
var string: String {
switch self {
case .MenuItemHistory:
return L10n.tr(key: "Menu.Item.History")
case .MenuItemNotifications:
return L10n.tr(key: "Menu.Item.Notifications")
case .MenuItemFavourites:
return L10n.tr(key: "Menu.Item.Favourites")
case .MenuItemAbout:
return L10n.tr(key: "Menu.Item.About")
}
}
private static func tr(key: String, _ args: CVarArg...) -> String {
let format = NSLocalizedString(key, bundle: Bundle(for: BundleToken.self), comment: "")
return String(format: format, locale: Locale.current, arguments: args)
}
}
func tr(_ key: L10n) -> String {
return key.string
}
private final class BundleToken {}
Note:文件格式类似于SwiftGen 生成。在
以后可以在如下代码中引用这样一个常量:
self.yourTextField.text = tr(.MenuItemAbout)
- 项目
标签: