{ "info": { "author": "4teamwork AG", "author_email": "mailto:info@4teamwork.ch", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Intended Audience :: Developers", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "=========================\n ftw.recipe.translations\n=========================\n\n``ftw.recipe.translations`` provides mass theese features:\n\n- ``bin/i18n-build``: Package rebuilding script for installing in a single package.\n\n- ``bin/masstranslate``: export / import of translations into / from Google\n Docs spreadsheets for letting translators translate in a better environment.\n\n.. contents:: Table of Contents\n\n\nbin/i18n-build\n==============\n\nThe ``i18n-build`` script is installed for a single package.\nWhen executed, all languages of all domains translated in this package are rebuilt.\n\nThe script expectes exactly one primary domain.\nThe domain name is expected to be equal to the package name (configurable).\n\nWhat the script does:\n\n- The script rebuilds the primary package using `i18ndude`: it scans for translated\n strings in the code and rebuilds the `.pot` of the primary domain.\n\n- It syncs the `.po`-files of all domains in all languages.\n\n\nInstallation and configuration\n------------------------------\n\nFor installation simply use the zc.buildout recipe ``ftw.recipe.translations:package``:\n\n.. code:: ini\n\n [buildout]\n parts = i18n-build\n\n [i18n-build]\n recipe = ftw.recipe.translations:package\n package-name = my.package\n\n**Options:**\n\npackage-name\n The setuptools-name of the package (required).\n\ni18n-domain\n The name of the primary domain of this package (optional, defaults to the package name).\n\npackage-namespace\n The package namespace used for scanning the code when rebuilding the\n primary domain (optional, defaults to the the package name).\n\n**Full example:**\n\n.. code:: ini\n\n [buildout]\n parts = i18n-build\n\n [i18n-build]\n recipe = ftw.recipe.translations:package\n package-name = MyPackage\n i18n-domain = mypackage\n package-namespace = my.package\n\n\nUsage\n-----\n\nRebuilding and syncing all existing languages:\n\n.. code:: sh\n\n $ bin/i18n-build\n Rebuilding .../my/package/locales/mypackage.pot\n .../my/package/locales/de/LC_MESSAGES/mypackage.po: 0 added, 2 removed\n .../my/package/locales/en/LC_MESSAGES/mypackage.po: 1 added, 2 removed\n .../my/package/locales/de/LC_MESSAGES/plone.po: 1 added\n .../my/package/locales/en/LC_MESSAGES/plone.po: 1 added\n\n\nCreating translations (.po-files) for new languages:\n\n.. code:: sh\n\n $ bin/i18n-build fr it\n Rebuilding .../my/package/locales/mypackage.pot\n .../my/package/locales/de/LC_MESSAGES/mypackage.po: 0 added, 2 removed\n .../my/package/locales/en/LC_MESSAGES/mypackage.po: 1 added, 2 removed\n .../my/package/locales/fr/LC_MESSAGES/mypackage.po: 80 added, 0 removed\n .../my/package/locales/it/LC_MESSAGES/mypackage.po: 80 added, 0 removed\n .../my/package/locales/de/LC_MESSAGES/plone.po: 1 added\n .../my/package/locales/en/LC_MESSAGES/plone.po: 1 added\n .../my/package/locales/fr/LC_MESSAGES/plone.po: 3 added, 0 removed\n .../my/package/locales/it/LC_MESSAGES/plone.po: 3 added, 0 removed\n\n\n\n\nbin/masstranslate\n=================\n\nThe ``masstranslate`` script is installed in a buildout which checks out\nall relevant packages into an ``src``-directory (e.g. using ``mr.developer``).\n\nYou then can upload all translations of all packages in the source-directory\ninto a Googlea spreadsheet for translation.\nWhen the translation is done in the Google spreadsheet the script can download\nall translations and sync them back to the right place in the packages.\n\nInstallation and Configuration\n------------------------------\n\nUsing the buildout recipe generates a script ``bin/masstranslate``:\n\n.. code:: ini\n\n [buildout]\n parts = translations\n\n [translations]\n recipe = ftw.recipe.translations [masstranslate]\n spreadsheet = https://docs.google.com/spreadsheet/ccc?key=0AgoYEZSDYCg1dEZvVGFTRUc3RDd6123DAFDER\n\n\nThe generated ``bin/masstranslate`` script is preconfigured with the\nconfigured ``spreadsheet`` url and applies to all .po-files in the\n``./src`` directory by default.\n\n\nGoogle authentication and authorization\n---------------------------------------\n\nGoogle auth is implemented using OAuth2.\nThis means you require to have an application set up in your\nGoogle API Console or at least have the application secrets (.json) of such\nan application.\nThe application secrets need to be copied to\n``~/.buildout/ftw.recipe.translations.json``.\nFor instructions for creating a Google application see the\n`Wiki page `_.\n\nWhen using the ``upload`` and ``download`` commands, the OAuth2 authentication\nis done with the configure application.\nThe browser is opened and the user can grant access for the application\nto his Google Drive.\nThe received ticket is stored in the users keyring / keychain.\n\nIf the server in your running this script do not have a web browser (for instance\nyou are running it in a shared computer logged-in through SSH), the browser\nthat pops-up is unable to handle the authorization process or if you prefer\nto authorize the application using your own web browser; add the\n``--noauth_local_webserver=True`` parameter to the script. Using this option the\nscript will show a URL which you should open with your browser manualy, and later\nenter the authorization code showed in that browser back in the console.\n\n\nThe `sync` command\n------------------\n\nThe ``bin/masstranslate`` script provides a ``sync`` command for rebuilding\nprimary-domain .pot-files and syncing them with all languages.\n\nAs **primary domain** the package name (folder in the ``src`` directory) is\nexpected.\nPrimary domains are rebuilt (the package is searched for translatable\nstrings) and ``[domain]-manual.pot``-files in the ``locales``\ndirectory are automatically merged.\nNon-primary domains are never rebuilt and expected to be updated manually.\n\nAll domains are then sync to all existing languages.\n\nExample:\n\n.. code:: sh\n\n ./bin/masstranslate sync\n\nCreating new languages for all packages and domains is as easy as passing\na positional argument:\n\n.. code:: sh\n\n ./bin/masstranslate sync de\n\n\nThe `upload` command\n--------------------\n\nWith the upload command translations can easily be extracted from the\n``.po``-Files and uploaded into a Google spreadsheet.\nThe ``upload`` command always creates a new worksheet in the Google spreadsheet,\nso that existing data is never overwritten.\n\nSee the ``Configuration`` section on how to configure the spreadsheet URL.\n\nWith positional arguments the languages to be translated can be specificied.\nEach defined language is included in the spreadsheet.\nIf a message is translated in all languages, the message is not uploaded\nunless the ``--all`` keyword is used.\n\nAdditional languages, which are not checked for existing translations, can\nbe added using the ``--additional-languages`` keyword, those may be useful\nfor the translator.\n\nExample:\n\n.. code:: sh\n\n ./bin/masstranslate upload de fr --additional-languages en es\n Spreadsheet: https://docs.google.com/spreadsheet/ccc?key=0AgoYEZ....\n Loading translations\n Starting Upload\n 1 of 191 (0%): Upload\n 9 of 191 (4%): Upload\n ...\n Finished Upload\n Uploaded into worksheet \"013: 2014-01-31\"\n\nThe `download` command\n----------------------\n\nThe download command syncs translations back from the spreadsheet into the\n``.po``-files in the source directory.\nWhen starting a download, the user is asked for the worksheet and languages\nto download.\nWhen a message is not translated in the spreadsheet, it is never updated\nin the .po-file.\n\nExample:\n\n.. code:: sh\n\n ./bin/masstranslate download\n Please select a worksheet to download:\n [1] 011: 2014-01-31\n [2] 012: 2014-01-31\n [3] 013: 2014-01-31\n\n Please enter the spreadsheet number: 1\n Please select the languages to synchronize:\n - de\n - fr\n\n Enter one language code at a time, finish selection with an empty enter.\n Language: fr\n Language:\n\n\nTranslation headers\n===================\n\nThe syncing commands remove the .po-file header `Domain`, `Language-Name` and\n`Language-Code`. The reason for this behavior is that this package is primarely\nmade for Plone packages and Plone does not read those headers (it gets the\ninformation from the paths, e.g. `locales/[lang-code]/LC_MESSAGES/[domain].po`).\nBecause the headers are not relevant they are often not maintained properly and\ntherefore usually wrong.\n\n\nLinks\n=====\n\n- github project: https://github.com/4teamwork/ftw.recipe.translations\n- Issues: https://github.com/4teamwork/ftw.recipe.translations/issues\n- Pypi: http://pypi.python.org/pypi/ftw.recipe.translations\n- Continuous integration: https://jenkins.4teamwork.ch/search?q=ftw.recipe.translations\n\n\nCopyright\n=========\n\nThis package is copyright by `4teamwork `_.\n\n``ftw.recipe.translations`` is licensed under GNU General Public License, version 2.\n\nChangelog\n=========\n\n\n1.2.6 (2017-01-09)\n------------------\n\n- Support additional locales directories in subpackages. [jone]\n\n- Support newest path.py version 10.0. [jone]\n\n\n1.2.5 (2015-11-24)\n------------------\n\n- Require oauth2client (and six) dependencies only when installing\n the masstranslate recipe.\n This reduces dependency problems with six.\n [jone]\n\n\n1.2.4 (2015-11-17)\n------------------\n\n- Update oauth2client version constraint in order to improve plone compatibility.\n [maethu]\n\n\n1.2.3 (2015-04-16)\n------------------\n\n- Ignore no longer existing translations.\n [phgross]\n\n\n1.2.2 (2015-03-13)\n------------------\n\n- Remove too strict six version pinning.\n six is pinned in Plone 4.3 KGS and newer.\n For older Plone versions it should be pinned down, e.g. to `1.4.0`.\n [jone]\n\n\n1.2.1 (2014-12-14)\n------------------\n\n- Retain Plone KGS compatibility by pinning oauth2client and six dependencies.\n [jone]\n\n\n1.2.0 (2014-06-05)\n------------------\n\n- Masstranslate: add support for Google Oauth --noauth_local_webserver.\n This option is useful when there is no local browser (e.g. when\n connected through ssh to a server).\n [jone]\n\n\n1.1.1 (2014-03-05)\n------------------\n\n- i18nbuild: Remove \"Domain\", \"Language-Code\" and \"Language-Name\" headers.\n Plone does not need those headers, it takes informations from the path.\n The headers are usually not set correctly, so we just remove them.\n [jone]\n\n\n1.1.0 (2014-03-05)\n------------------\n\n- Implement new bin/i18n-build recipe and script.\n [jone]\n\n- Rename bin/translations to bin/masstranslate.\n [jone]\n\n\n1.0.2 (2014-01-31)\n------------------\n\n- Fix previous brown bag releases: make buildout recipe work.\n [jone]\n\n\n1.0.1 (2014-01-31)\n------------------\n\n- Fix missing distribution buildout error.\n [jone]\n\n\n1.0.0 (2014-01-31)\n------------------\n\n- Initial implementation.\n [jone]", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/4teamwork/ftw.recipe.translations", "keywords": "ftw recipe translations import export google docs", "license": "GPL2", "maintainer": "", "maintainer_email": "", "name": "ftw.recipe.translations", "package_url": "https://pypi.org/project/ftw.recipe.translations/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ftw.recipe.translations/", "project_urls": { "Homepage": "https://github.com/4teamwork/ftw.recipe.translations" }, "release_url": "https://pypi.org/project/ftw.recipe.translations/1.2.6/", "requires_dist": null, "requires_python": "", "summary": "Mass export / import of translations into Google Docs Spreadsheets", "version": "1.2.6" }, "last_serial": 5823538, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "568f0b664963c206d702083ac4dbbfb0", "sha256": "723ff817c22c5237adadc1d8aec8034d03959350e04cfbc809e00b127b848b39" }, "downloads": -1, "filename": "ftw.recipe.translations-1.0.0.zip", "has_sig": false, "md5_digest": "568f0b664963c206d702083ac4dbbfb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40377, "upload_time": "2014-01-31T15:37:30", "url": "https://files.pythonhosted.org/packages/bf/92/461d027b3692e3309330c2ae4808e2a3d506f899d53105c032a6044e283b/ftw.recipe.translations-1.0.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a727bb94624fa41f387194fb14c68226", "sha256": "682fc18164e064b29652f7765eff6763281eb76ce122f9db82c8298a7272d878" }, "downloads": -1, "filename": "ftw.recipe.translations-1.0.1.zip", "has_sig": false, "md5_digest": "a727bb94624fa41f387194fb14c68226", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40350, "upload_time": "2014-01-31T15:51:52", "url": "https://files.pythonhosted.org/packages/d8/fe/e8337634377962d34c2c4c68712aca0b2826cf653c8bad4b04c0a08ae15b/ftw.recipe.translations-1.0.1.zip" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "b32f28fdfec96874e78b40833c79824b", "sha256": "0d5638d755dc36f2fc3bcb7e53fbe5b08286a09de97a4ee37b82510a48cc8f96" }, "downloads": -1, "filename": "ftw.recipe.translations-1.0.2.zip", "has_sig": false, "md5_digest": "b32f28fdfec96874e78b40833c79824b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40456, "upload_time": "2014-01-31T16:04:41", "url": "https://files.pythonhosted.org/packages/76/5e/aabdac9e690120eeb18e32e6a88d8bb2e917a888a450e044329eb66cb0d2/ftw.recipe.translations-1.0.2.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "74f656b3dbfebe6121569a2ba90fe6d5", "sha256": "f9825bc706fcb71506b46dc4e9493990be044b3279c329b9d5acbc10d626c5d5" }, "downloads": -1, "filename": "ftw.recipe.translations-1.1.0.zip", "has_sig": false, "md5_digest": "74f656b3dbfebe6121569a2ba90fe6d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55894, "upload_time": "2014-03-05T12:52:27", "url": "https://files.pythonhosted.org/packages/8f/1e/b31e4cc85aad111019fdee5398b17ff645d3e691524e996821a4b70d0070/ftw.recipe.translations-1.1.0.zip" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "91dbf367d841e75bab85cdd4b4c3d634", "sha256": "06ef02e599b52b68cd92bb7de9ddb13e56f7a5e1a8c4f7e98d5a84b221b9d450" }, "downloads": -1, "filename": "ftw.recipe.translations-1.1.1.zip", "has_sig": false, "md5_digest": "91dbf367d841e75bab85cdd4b4c3d634", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57351, "upload_time": "2014-03-05T14:21:08", "url": "https://files.pythonhosted.org/packages/08/3c/42193f79de941d3050f15f176101149a49194b1b5f5c3eff2586316256d3/ftw.recipe.translations-1.1.1.zip" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "a35199f63664aa9adda6581a3b0d8422", "sha256": "a9fe97ffe0d288aa7eb403f9db709c137825e9005bf8b0304bee4974ccd88b59" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.0.zip", "has_sig": false, "md5_digest": "a35199f63664aa9adda6581a3b0d8422", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58509, "upload_time": "2014-06-05T07:32:05", "url": "https://files.pythonhosted.org/packages/7c/d1/cef9c782e1bd5e008eeac6a4bc7dec33178cc0f28bdece9823c5716936c3/ftw.recipe.translations-1.2.0.zip" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "0961259cd830d51b6f833efef630acc6", "sha256": "42fd269a2a2c4843b7d1c3bc40229ef6d25888ed3545beda9c9f40e704125811" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.1.zip", "has_sig": false, "md5_digest": "0961259cd830d51b6f833efef630acc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58805, "upload_time": "2014-12-14T19:57:34", "url": "https://files.pythonhosted.org/packages/06/82/e1466c68ef3c52756e3cc5c2ce31d956211d3ce2bff50aaad20147c8b5dd/ftw.recipe.translations-1.2.1.zip" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "7586640babf0d8dc586d8ca89de43c9c", "sha256": "9cd4b02f3302db545ab322b50559778d5153d2db1a7a23970f0a92c21cafa5e0" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.2.zip", "has_sig": false, "md5_digest": "7586640babf0d8dc586d8ca89de43c9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59635, "upload_time": "2015-03-13T17:34:54", "url": "https://files.pythonhosted.org/packages/22/1c/7eacd16383ff4f07132b4a7a54036cf3a6eec37ec26c37b4a8b915b4ac73/ftw.recipe.translations-1.2.2.zip" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "c5624da7b85eac7b32bbb0a52b8286ee", "sha256": "a2518992984cad664062f0c21e93f7d0340c0cab59cf65248e85a413d198a1fa" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.3.zip", "has_sig": false, "md5_digest": "c5624da7b85eac7b32bbb0a52b8286ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59855, "upload_time": "2015-04-16T15:06:29", "url": "https://files.pythonhosted.org/packages/f3/0e/c38a2936f0fbba6147471a6a7481c75de94134c32bcfb2f5f26ca3cccbfd/ftw.recipe.translations-1.2.3.zip" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "f4ec97910749c439e7c23e1cacab9f7c", "sha256": "7cfa2db008c3aea811e647710a3fae8febe196ee2d59760a0bed94f4bacec71f" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.4.tar.gz", "has_sig": false, "md5_digest": "f4ec97910749c439e7c23e1cacab9f7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32576, "upload_time": "2015-11-17T10:43:23", "url": "https://files.pythonhosted.org/packages/31/e9/f74668ea33bdd740fcf5699f72740394c8eb3d9134369fdb2b4f69931020/ftw.recipe.translations-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "ac7fbfb01dcca0a7e573df6cc039df17", "sha256": "6d39ed57a09cb861b65a6669f2e0272636405e897a06bcc82b29345a6385256e" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.5.tar.gz", "has_sig": false, "md5_digest": "ac7fbfb01dcca0a7e573df6cc039df17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32334, "upload_time": "2015-11-24T13:55:11", "url": "https://files.pythonhosted.org/packages/a4/37/78636678bbb4f61bdc49fbe7cad550a4a23b68c69835caf4cd5422c45b1e/ftw.recipe.translations-1.2.5.tar.gz" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "e2c525a444bcc1bdc2aac6112d0caa4a", "sha256": "0590923260b9bb1820d80e428f7ffa41929b19ced546d9c3377714954f95f569" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.6.tar.gz", "has_sig": false, "md5_digest": "e2c525a444bcc1bdc2aac6112d0caa4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32425, "upload_time": "2017-01-09T09:27:40", "url": "https://files.pythonhosted.org/packages/44/90/9eca57241d09a5aea4f82d94fd476ddddfae926e71fadc7f5810d2ff770e/ftw.recipe.translations-1.2.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e2c525a444bcc1bdc2aac6112d0caa4a", "sha256": "0590923260b9bb1820d80e428f7ffa41929b19ced546d9c3377714954f95f569" }, "downloads": -1, "filename": "ftw.recipe.translations-1.2.6.tar.gz", "has_sig": false, "md5_digest": "e2c525a444bcc1bdc2aac6112d0caa4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32425, "upload_time": "2017-01-09T09:27:40", "url": "https://files.pythonhosted.org/packages/44/90/9eca57241d09a5aea4f82d94fd476ddddfae926e71fadc7f5810d2ff770e/ftw.recipe.translations-1.2.6.tar.gz" } ] }