谷歌工作表的非认证认证url刮刀

googlesheettranslate的Python项目详细描述


概述

sheet-localization从单个Google电子表格生成Android/iOS本地化文件。在

ScreenshotScreenshot

命令行参数

您通常是这样运行sheet-localization

python /path/to/sheet-localization/main.py /path/to/account_credentials.json SpreadSheetName TargetName

  1. account_credentials.json是注册Google服务帐户后获得的文件

  2. SpreadSheetName是要打开的电子表格的名称

    Note:必须授予Google服务帐户访问电子表格的读取权限 通过与服务帐户的电子邮件共享文档

  3. TargetName可以是androidios或{}之一。在

目标

android目标

sheet-localization在当前目录中生成res/value-<lang>/strings.xml层次结构。在

ios目标

sheet-localization在当前目录中生成<lang>.lproj/Localizable.strings层次结构。在

该脚本还生成LocalizationConstants.hLocalizationConstants.m文件 转换常量。在

ios-swift目标

sheet-localization在当前目录中生成<lang>.lproj/Localizable.strings层次结构。在

该脚本还生成带有转换常量的LocalizationConstants.swift文件 (实际上,枚举)。在

安装

这些脚本需要Python 2.7+。在

iOS生成在python3+中不起作用

  1. Linux系统 托多

  2. 窗口 托多

  3. 马科斯

    1. 升级six

      sudo easy_install -U six

    2. 安装pip包管理器

      sudo easy_install pip

    3. 安装gspreadoauth2client

      sudo -H pip install --upgrade gspread oauth2client

分步指南

1。克隆示例Google电子表格

ScreenshotScreenshot

sample spreadsheet克隆到你的Google驱动器。在

示例文档包含两个必选页:

  1. SRC包含翻译和密钥
  2. CFG包含键所在的配置以及行转换的起始位置

这些页面是脚本所必需的,所以一定要保留它们。在

2。创建新的googleapi项目

ScreenshotScreenshot

转到Google API console并创建一个新项目。在

3。启用Google Drive API

ScreenshotScreenshotScreenshot

启用Google Drive API。在

4。创建服务帐户

ScreenshotScreenshotScreenshot

Web server创建服务帐户凭据以访问Application data

命名服务帐户并赋予它Project -> Editor角色。在

创建帐户后,您应该获得一个特殊的JSON,它包含所有必需的凭证。在

5。允许服务帐户读取电子表格文档

Screenshot

您下载的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本地化文件

Screenshot

转到您选择的目录并 使用以下命令生成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文件,其内容如下:

^{pr2}$

7。生成iOS本地化文件

Screenshot

转到您选择的目录并 使用以下命令生成iOS本地化文件:

cd /path/to/android/project

python /path/to/sheet-localization/main.py /path/to/service_account_credentials.json 'Spreadsheet Key' ios

这就产生了

  1. <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";
    
  2. LocalizationConstants.h包含以下内容的文件:
    /*!
    * @b en@: History
    
    * @b ru@: История
    
    * @b uk@: Історія
    
    */
    extern NSString * const trMenuItemHistory;
    
    /*!
    * @b en@: Notifications
    
    * @b ru@: Уведомления
    
    * @b uk@: Сповіщення
    
    */
    extern NSString * const trMenuItemNotifications;
    
  3. 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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
雅加达。木卫一。WriteAbortedException:写入中止;JAVA木卫一。NotSerializableException   如果没有互联网连接,java“重启”应用程序   ant将我的Mac更新为最新的Java JDK时遇到的困难   java从边的文本文件创建网络   java多个枚举与一个枚举   使用XML进行JavaBean验证:字段上的多个相同约束   java Eclipse报告HTML警告以获得正确的(正如我假设的)代码   java使用Jackson从POJO数组生成JSON模式   在JTextPane java swing中填充行的rectange后无法与视图同步   如何编写Java字符串。格式化为ruby代码?   java如何使Hibernate标准只包含所需字段   在java中拆分字符串,更改字母和分组   mysql Java 1.8.0_60,MariaDB v10。0和mariadbjavaclient 1.2.2,“未找到合适的驱动程序”   java试图做一个简单的计算,结果不正确   javatomcat远程访问   java我安装了安卓 studio,创建了我的第一个项目,面对这个错误。。。我点击了所有链接,但什么都没发生   JavaSpring3。0注释   SwingJavaJLabel。setText()方法重载时不使用字符串