Skip to main content

update localization texts from google doc

Project description

Quick Start

Install

pip3 install gslocalizator

Using

#!/usr/bin/env python
from gslocalizator import GoogleSheetLocalizator as GSLr
from cfg import *


def main():
    with GSLr(GSL_CREDS_FILE, GSL_SPREADSHEET_ID) as gslr:
        gslr.tran(
            from_sheet_range='main!A1:E',
            with_key_column='iOS(IM)Key',
            from_value_column_to_file={
                'zh-Hans': '.datas/ios/strings_main/zh-Hans.lproj/Localizable.strings',
                'zh-Hant': '.datas/ios/strings_main/zh-Hant.lproj/Localizable.strings',
                'en': '.datas/ios/strings_main/en.lproj/Localizable.strings',
                'ja': '.datas/ios/strings_main/ja.lproj/Localizable.strings',
            },
            exclude_headers=['//']
        ).request(
        ).save(format="iOS")


if __name__ == '__main__':
    main()

cell formater

Cell formater used to format cells in the spreadsheet.

for example:

title of key title of lang1 title of lang2 ...
Hello Hello 您好 hhhh
world world 世界 wwww

key_formater only be used to cells that under "title of key".

key_formater area

You can custom your formater for keys and cells

def cell_fmter(val: str) -> str:
    return re.sub("\s+", " ", val).strip().replace("%s", "%@").replace("\"", "\\\"")


def key_fmter(val: str) -> str:
    return re.sub("\s+", " ", val).strip().replace("%s", "%@")


def load():
    # ...
    with GSLr(GSL_CREDS_FILE, GSL_SPREADSHEET_ID) as gslr:
        gslr.tran(
            from_sheet_range='bizA!A1:F',
            with_key_column='key',
            from_value_column_to_file={
                'zh-Hans': '.datas/ios/strings_biz_a/zh-Hans.lproj/Localizable.strings',
                'zh-Hant': '.datas/ios/strings_biz_a/zh-Hant.lproj/Localizable.strings',
                'en': '.datas/ios/strings_biz_a/en.lproj/Localizable.strings',
                'ja': '.datas/ios/strings_biz_a/ja.lproj/Localizable.strings',
            },
            exclude_headers=['//'],
            cell_formater=cell_fmter
        ).request(
        ).save(format="iOS")
    # ...
# replace "'" to "\'" demo
def cell_fmter(val: str) -> str:
    aVal = re.sub('\w(\')', lambda x: x.group(1), val) # replace "'" to "\'"
    return re.sub("\s+", " ", aVal).strip().replace("%s", "%@").replace("\"", "\\\"")

You can merge diffrent sheets to one file.

Sheet "bizA" and sheet "main" merge to "app/***/strings.xml"

def request_android(gslr: GSLr):
    gslr.reset()
    gslr.tran(
        from_sheet_range='bizA!A1:E',
        with_key_column='key',
        from_value_column_to_file={
            'zh-Hans': '.datas/android/app/values-zh-rCN/strings.xml',
            'zh-Hant': '.datas/android/app/values-zh-rTWj/strings.xml',
            'en': '.datas/android/app/values/strings.xml',
            'ja': '.datas/android/app/values-ja-rJP/strings.xml',
        },
        exclude_headers=['//'],
        cell_formater=cell_fmter,
        key_formater=key_fmter
    ).tran(
        from_sheet_range='main!A1:E',
        with_key_column='iOS(IM)Key',
        from_value_column_to_file={
            'zh-Hans': '.datas/android/app/values-zh-rCN/strings.xml',
            'zh-Hant': '.datas/android/app/values-zh-rTWj/strings.xml',
            'en': '.datas/android/app/values/strings.xml',
            'ja': '.datas/android/app/values-ja-rJP/strings.xml',
        },
        exclude_headers=['//']
    ).request(
    ).save(format="Android")

Or you can write diff sheets to their own files.

Sheet "bizA" save to "strings_biz_a/***/strings.xml"

Sheet "main" save to "strings_main/***/strings.xml"

def request_android(gslr: GSLr):
    gslr.reset()
    gslr.tran(
        from_sheet_range='bizA!A1:E',
        with_key_column='key',
        from_value_column_to_file={
            'zh-Hans': '.datas/android/strings_biz_a/values-zh-rCN/strings.xml',
            'zh-Hant': '.datas/android/strings_biz_a/values-zh-rTWj/strings.xml',
            'en': '.datas/android/strings_biz_a/values/strings.xml',
            'ja': '.datas/android/strings_biz_a/values-ja-rJP/strings.xml',
        },
        exclude_headers=['//'],
        cell_formater=cell_fmter,
        key_formater=key_fmter
    ).tran(
        from_sheet_range='main!A1:E',
        with_key_column='iOS(IM)Key',
        from_value_column_to_file={
            'zh-Hans': '.datas/android/strings_main/values-zh-rCN/strings.xml',
            'zh-Hant': '.datas/android/strings_main/values-zh-rTWj/strings.xml',
            'en': '.datas/android/strings_main/values/strings.xml',
            'ja': '.datas/android/strings_main/values-ja-rJP/strings.xml',
        },
        exclude_headers=['//']
    ).request(
    ).save(format="Android")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gslocalizator-1.0.0.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

gslocalizator-1.0.0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file gslocalizator-1.0.0.tar.gz.

File metadata

  • Download URL: gslocalizator-1.0.0.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.9.6

File hashes

Hashes for gslocalizator-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ed5aec2918daca65876afb4425ec15b61810e7f690b817809670f6b0a512f05c
MD5 f342e654130ef49f3ec74116a9b05fd7
BLAKE2b-256 d252a37aeafbaed1cd72e8d798df5150a290445b79334cbfd339f5538b4d8382

See more details on using hashes here.

File details

Details for the file gslocalizator-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: gslocalizator-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.9.6

File hashes

Hashes for gslocalizator-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1dc77a3032b6447f7a69a6c188602ee1106afee0607d6cbca3108973eccf58ce
MD5 0a25d5dced2d88f35ad37fd889bf4c08
BLAKE2b-256 d61f95f0cc13af288f36963fc29238141780136fe93f9e4ae9715faca9c02aa4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page