{ "info": { "author": "Ramon Navarro Bosch", "author_email": "ramon@.nb@gmail.com", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Programming Language :: Python" ], "description": "NOT in development. This package is beeing merged on plone.app.multilingual\n\n.. image:: https://travis-ci.org/plone/plone.multilingual.png\n :target: http://travis-ci.org/plone/plone.multilingual\n\nplone.multilingual\n==================\n\nThis package contains the core functionality for the next generation multilingual engine.\n\nThese are the main artifacts and its purposes:\n\n canonical:\n * the canonical organizes the information about a \"translation-group\"\n * it's using a dictionary with language-codes as keys and uuids\n (provided by plone.uuid) as values\n\n storage:\n * persistent storage, which holds the canonicals in an IOBTree\n * the OOBTree's key is the UUID of the content, the according value is the canonical\n\n manager:\n * adapter for ITranslatable\n * provides the translations API\n\n adapters:\n * ITranslationLocator - where to put a translation\n * ITranslationIdChooser - generates a valid id for a translation\n * ITranslationCloner - copy the language-independent content to the translation\n * ITranslationFactory - creates the translation\n\nIn order to have a test we have a type called Demo that has an adapter\ncalled DemoLanguage that will allow to get the language of the object::\n\n >>> from plone.multilingual.interfaces import ITranslationManager\n >>> from plone.multilingual.interfaces import ILanguage\n >>> from plone.app.testing import setRoles, login, TEST_USER_ID, TEST_USER_NAME\n >>> from zope.lifecycleevent import modified\n\n >>> portal = layer['portal']\n >>> setRoles(portal, TEST_USER_ID, ['Manager'])\n >>> login(portal, TEST_USER_NAME)\n >>> portal.invokeFactory('Folder', 'ob1', title=u\"An archetypes based folder\")\n 'ob1'\n\n >>> ILanguage(portal['ob1']).set_language('ca')\n >>> portal['ob1'].reindexObject()\n >>> modified(portal['ob1'])\n\nEnsuring that the new object gets its UUID::\n\n >>> from plone.uuid.interfaces import IUUID\n >>> ob1_uuid = IUUID(portal['ob1'])\n >>> isinstance(ob1_uuid, str)\n True\n\nWe create a new translation in 'en' language::\n\n >>> ITranslationManager(portal['ob1']).add_translation('en')\n\nWe try to create a new translation in 'ca' that already exists::\n\n >>> ITranslationManager(portal['ob1']).add_translation('ca')\n Traceback (most recent call last):\n ...\n KeyError: 'Translation already exists'\n\nWe try to create a new translation without language::\n\n >>> ITranslationManager(portal['ob1']).add_translation(None)\n Traceback (most recent call last):\n ...\n KeyError: 'There is no target language'\n\nWe get the 'en' translation::\n\n >>> ITranslationManager(portal['ob1']).get_translation('en')\n \n >>> ILanguage(ITranslationManager(portal['ob1']).get_translation('en')).get_language() == 'en'\n True\n\nlet's get all the translations::\n\n >>> ITranslationManager(portal['ob1']).get_translations()\n {'ca': , 'en': }\n\nlet's get only the languages::\n\n >>> ITranslationManager(portal['ob1']).get_translated_languages()\n ['ca', 'en']\n\nhas_translation::\n\n >>> ITranslationManager(portal['ob1']).has_translation('en')\n True\n\n >>> ITranslationManager(portal['ob1']).has_translation('it')\n False\n\nregister_translation with invalid language::\n\n >>> ITranslationManager(portal['ob1']).remove_translation('en')\n >>> ITranslationManager(portal['ob1']).register_translation(None, portal['ob1-en'])\n Traceback (most recent call last):\n ...\n KeyError: 'There is no target language'\n\nregister a translation with content::\n\n >>> ITranslationManager(portal['ob1']).register_translation('en', portal['ob1-en'])\n >>> ITranslationManager(portal['ob1']).get_translations()\n {'ca': , 'en': }\n\nchanging the content-language (there should act a subscriber)::\n\n >>> ILanguage(portal['ob1-en']).set_language('it')\n >>> from zope.event import notify\n >>> from zope.lifecycleevent import ObjectModifiedEvent\n >>> notify(ObjectModifiedEvent(portal['ob1-en']))\n >>> ITranslationManager(portal['ob1']).get_translations()\n {'ca': , 'it': }\n\ntest more translations::\n\n >>> obj_it = ITranslationManager(portal['ob1']).get_translation('it')\n >>> ITranslationManager(obj_it).add_translation('fr')\n >>> ITranslationManager(obj_it).add_translation('pt')\n >>> ITranslationManager(portal['ob1']).get_translated_languages()\n ['ca', 'it', 'fr', 'pt']\n >>> ITranslationManager(obj_it).get_translated_languages()\n ['ca', 'it', 'fr', 'pt']\n\ntest if canonicals objects are the same::\n\n >>> obj_ca = ITranslationManager(obj_it).get_translation('ca')\n >>> canonical_it = ITranslationManager(obj_it).query_canonical()\n >>> canonical_ca = ITranslationManager(obj_ca).query_canonical()\n >>> canonical_it == canonical_ca\n True\n\nMessing up with content\n-----------------------\nIn case that we do mess up things with content (users always do)::\n\n >>> from zope.lifecycleevent import modified\n >>> portal.invokeFactory('Folder', 'ob2', title=u\"An archetypes based doc\")\n 'ob2'\n >>> ILanguage(portal['ob2']).set_language('it')\n >>> modified(portal['ob2'])\n >>> ILanguage(portal['ob2']).get_language()\n 'it'\n >>> ITranslationManager(portal['ob2']).add_translation('en')\n >>> ob2_en = ITranslationManager(portal['ob2']).get_translation('en')\n\n >>> portal.invokeFactory('Folder', 'ob3', title=u\"An archetypes based doc\")\n 'ob3'\n >>> ILanguage(portal['ob3']).set_language('it')\n >>> modified(portal['ob3'])\n >>> ILanguage(portal['ob3']).get_language()\n 'it'\n >>> ITranslationManager(portal['ob3']).add_translation('es')\n >>> ob3_es = ITranslationManager(portal['ob3']).get_translation('es')\n\n >>> from OFS.event import ObjectWillBeRemovedEvent\n >>> notify(ObjectWillBeRemovedEvent(portal['ob2']))\n >>> portal.manage_delObjects('ob2')\n\n >>> notify(ObjectWillBeRemovedEvent(ob3_es))\n >>> portal.manage_delObjects(ob3_es.id)\n\n >>> c_old = ITranslationManager(portal['ob3']).query_canonical()\n >>> c_new = ITranslationManager(ob2_en).query_canonical()\n >>> c_old == c_new\n False\n\n >>> isinstance(c_old, str)\n True\n >>> isinstance(c_new, str)\n True\n\n >>> ITranslationManager(ob2_en).register_translation('it', portal['ob3'])\n\n >>> c1 = ITranslationManager(portal['ob3']).query_canonical()\n >>> c2 = ITranslationManager(ob2_en).query_canonical()\n >>> c1 == c2\n True\n\nOther use case, A('it' + 'en') and B('it' + 'es'), and we want A('en') -> B('es')::\n\n >>> portal.invokeFactory('Folder', 'mess1', title=u\"An archetypes based doc\")\n 'mess1'\n >>> ILanguage(portal['mess1']).set_language('it')\n >>> modified(portal['mess1'])\n >>> ILanguage(portal['mess1']).get_language()\n 'it'\n >>> ITranslationManager(portal['mess1']).add_translation('en')\n >>> mess1_en = ITranslationManager(portal['mess1']).get_translation('en')\n\n >>> portal.invokeFactory('Folder', 'mess2', title=u\"An archetypes based doc\")\n 'mess2'\n >>> ILanguage(portal['mess2']).set_language('it')\n >>> ITranslationManager(portal['mess2']).add_translation('es')\n >>> mess2_es = ITranslationManager(portal['mess2']).get_translation('es')\n\n >>> ITranslationManager(mess1_en).register_translation('es', mess2_es)\n >>> ITranslationManager(portal['mess2']).get_translation('es')\n >>> ITranslationManager(portal['mess1']).get_translation('es')\n \n\nDefault-Adapters\n----------------\nid-chooser::\n\n >>> from plone.multilingual.interfaces import ITranslationIdChooser\n >>> chooser = ITranslationIdChooser(portal['ob1-en'])\n >>> chooser(portal, 'es')\n 'ob1-es'\n\nlocator::\n\n >>> ITranslationManager(portal['ob1']).add_translation('es')\n >>> child_id = portal.ob1.invokeFactory('Folder', 'ob1_child', language=\"ca\")\n\n >>> from plone.multilingual.interfaces import ITranslationLocator\n >>> locator = ITranslationLocator(portal['ob1-en'])\n >>> locator('es') == portal\n True\n\n >>> child_locator = ITranslationLocator(portal.ob1.ob1_child)\n >>> child_locator('es') == portal['ob1-es']\n True\n\n >>> ITranslationManager(portal['ob1']).remove_translation('es')\n\nConvert intids to uuids upgrade step\n------------------------------------\n\nAn upgrade step is available in case of having an existing site with the experimental\n0.1 plone.multilingual version::\n\n >>> from plone.multilingual.upgrades.to02 import upgrade\n\n.. note::\n You must reinstall the plone.multilingual package in order to install the required new\n utility in place before upgrading. If you are using a version of Dexterity below 2.0, you\n must install the package plone.app.referenceablebehavior and enable the *Referenceable*\n (plone.app.referenceablebehavior.referenceable.IReferenceable) behavior for all your\n Dexterity content types before you attempt to upgrade your site.\n\nYou can run the @@pml-upgrade view at the root of your site or follow the upgrade step in\nportal_setup > upgrades. If you can't see the upgrade step, press *Show old upgrades* and\nselect the *Convert translation based intids to uuids (0.1 \u2192 02)*\n\nUpgrade to catalog\n------------------\n::\n\n >>> from plone.multilingual.upgrades.to03 import upgrade\n\nwe shouldn't find the storage-utility anymore::\n\n >>> from plone.multilingual.interfaces import IMultilingualStorage\n >>> gsm = portal.getSiteManager()\n >>> gsm.queryUtility(IMultilingualStorage) is None\n True\n\nChangelog\n=========\n\n1.2.1 2013-10-16\n----------------\n\n- Solving on-the-fly language independent field\n [ramon]\n\n1.2 2013-09-24\n--------------\n\n- Deprecated ``ObjectModifiedEvent`` method\n [ramon]\n\n- Don't fire ``ObjectModifiedEvent`` just reindex required indexes in catalog.\n [saily]\n\n- Don't trigger reindex if language has not changed.\n [saily]\n\n1.1.1 2013-07-03\n----------------\n\n- on IObjectRemovedEvent the subscriber ran and reindexed the object\n to be removed. Bug solved\n [ramon]\n\n1.1 2013-06-19\n--------------\n\n- change set_recursive_language in order to update each object\n by ITranslationManager instead of notify a IObjectModified event.\n This prevent a sort of recursion between different events\n [gborelli]\n\n- completed interfaces for TranslationManager and add method\n ``get_restricted_translations``\n [jensens]\n\n- uniquify translated languages [kiorky]\n\n1.0 2013-04-16\n--------------\n\n- Merge ``README.rst`` and ``src/plone/multilingual/README.rst`` into\n one single file.\n [saily]\n\n- Fix all integration- and doctests\n [saily]\n\n- Fix wrong accessor in DemoLanguage adapter.\n [saily]\n\n- Support Sessions in tests.\n [saily]\n\n- Update createdEvent to use aq_parent of created, copied or moved object\n instead of ``event.newParent`` which is not available on\n ``ObjectCreatedEvent``.\n [saily]\n\n- Some pep8 cleanup and alignment to plone coding conventions.\n [saily]\n\n- Add buildouts for Plone 4.0, 4.1, 4.2 and 4.3\n [saily]\n\n- Add travis integration\n [saily]\n\n1.0rc1 2013-01-26\n-----------------\n\n- Moved the external tool to catalog and added content attribute [ramon]\n\n- Upgrade steps from b3 to rc1 [ramon]\n\n- Fixed bugs on subscribers [sneridagh]\n\n- Make import of upgrade step \"to02\" depend on the existence of plone.dexterity [pysailor]\n\n- Added get_restricted_translations [ramon]\n\n1.0b3 2012-10-04\n------------------\n\n- added TestSubscribers to test subscribers for IObjectAddedEvent,\n IObjectCopiedEvent and IObjectMovedEvent [gborelli]\n\n- Do not raise a KeyError when registering or adding a language\n independent translation.\n [maurits]\n\n- Take account on the use case where user could do and do changes\n on the translations groups and its members. Be sure that it does\n not leaves any traces of orphan objects in the storage.\n [ramon, sneridagh]\n\n- Added Copy/Paste subscribers [ramon]\n\n- Moved generic AddContent subscribers to check language integrity [ramon]\n\n- Bug solving on ITranslationLocator [ramon]\n\n- Updating language, checking translations integrity [ramon]\n\n\n1.0b2 - 2012-07-09\n------------------\n\n- Change Language Independent identifier to '' [ramon]\n\n- Fixed the uninstall profile. [maurits]\n\n\n1.0b1 - 2012-04-03\n------------------\n\n- No changes.\n\n\n0.2b3 - 2012-04-03\n------------------\n\n- Remove get_field_names from api. [jcbrand]\n\n- Add IDefaultLanguageIndependentFieldsManager and adapter. [jcbrand]\n\n- Reindex object after creation. [ramon]\n\n\n0.1a2 - 2011-10-20\n------------------\n\n- Updated testing facilities to Plone Core packages style. [sneridagh]\n\n- Migrated from bare intids to plone.uuid facilities. [sneridagh]\n\n- Due to the previous change from this version to above, it's only\n compatible with Plone 4.1 and above. [sneridagh]\n\n- Added upgrade step and upgrade browser view to convert the 0.1a1\n intids based utility to the 0.1a2 uuids based one. [sneridagh]\n\n\n0.1a1 - 2011-10-03\n------------------\n\n- Initial version [ramon, awello, sneridagh]", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/plone/plone.multilingual/", "keywords": "", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "plone.multilingual", "package_url": "https://pypi.org/project/plone.multilingual/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/plone.multilingual/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/plone/plone.multilingual/" }, "release_url": "https://pypi.org/project/plone.multilingual/1.2.1/", "requires_dist": null, "requires_python": null, "summary": "Multilingual extensions core package", "version": "1.2.1" }, "last_serial": 895327, "releases": { "0.1a1": [ { "comment_text": "", "digests": { "md5": "9ae6df0f5711f5deaac23b0daa313dca", "sha256": "a721869b89a7e30aeb74313c5ba444e2a8ce93f4d4b5a2b4021cca82a3933650" }, "downloads": -1, "filename": "plone.multilingual-0.1a1.tar.gz", "has_sig": false, "md5_digest": "9ae6df0f5711f5deaac23b0daa313dca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9113, "upload_time": "2011-10-03T23:56:58", "url": "https://files.pythonhosted.org/packages/53/c0/7a5f8cef5397e78b293f89cb7169ae0f1b55c325048f7880aabdf1a02070/plone.multilingual-0.1a1.tar.gz" } ], "0.1a2": [ { "comment_text": "", "digests": { "md5": "debaec2e7571d114919cac86a9d2400f", "sha256": "2ac05b075e74df2145a7aefc6f6a0061ceec81f045f7bc8ebf85044b11e77725" }, "downloads": -1, "filename": "plone.multilingual-0.1a2-py2.6.egg", "has_sig": false, "md5_digest": "debaec2e7571d114919cac86a9d2400f", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 32055, "upload_time": "2012-01-02T11:34:36", "url": "https://files.pythonhosted.org/packages/73/81/7aa9c628d71fbce853f0742f51dda665d63e43178a26f88bb65020a141ff/plone.multilingual-0.1a2-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "19ded7b3d7307652e28d653390d6b855", "sha256": "6cc0589cce9a49ddc9769c7b338e6f911bdc6316d39d793a1345202d95cdafea" }, "downloads": -1, "filename": "plone.multilingual-0.1a2-py2.7.egg", "has_sig": false, "md5_digest": "19ded7b3d7307652e28d653390d6b855", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 31920, "upload_time": "2012-01-02T11:34:17", "url": "https://files.pythonhosted.org/packages/7a/b2/610fe6d9d96167b4e9f186ecedee83fd054eb1d7c35446fa1cd8a1263aaf/plone.multilingual-0.1a2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "5b0aa06a1b2c5775315989344fe9eabf", "sha256": "33b3f04d072d0ad90127d93681291b88808c1702490ab44d78073837b4e88802" }, "downloads": -1, "filename": "plone.multilingual-0.1a2.tar.gz", "has_sig": false, "md5_digest": "5b0aa06a1b2c5775315989344fe9eabf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16058, "upload_time": "2012-01-02T11:34:15", "url": "https://files.pythonhosted.org/packages/40/42/2c21f69be0370af4c354c2a95a27079dd15ca6ba7ff0dfeeec541415e49a/plone.multilingual-0.1a2.tar.gz" } ], "0.2b3": [ { "comment_text": "", "digests": { "md5": "b440c6841a22a8eb372f49c3c2363eeb", "sha256": "58d771362a7ea5c45437ef0fffedf89d27aa66bed72e2814492856427553a43f" }, "downloads": -1, "filename": "plone.multilingual-0.2b3-py2.6.egg", "has_sig": false, "md5_digest": "b440c6841a22a8eb372f49c3c2363eeb", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 32558, "upload_time": "2012-03-14T13:22:47", "url": "https://files.pythonhosted.org/packages/2c/67/6becd6ad577e3904d91be95353a1adc2518ac280c081dc2e015a924380c3/plone.multilingual-0.2b3-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "41e629d1489ba726e48cd2ffc6d07900", "sha256": "a9c31d79d14e5c0ee8dc70ed4cf3f3d3ca7dee9fef2e4f7ddfdd1d04ac86e280" }, "downloads": -1, "filename": "plone.multilingual-0.2b3.tar.gz", "has_sig": false, "md5_digest": "41e629d1489ba726e48cd2ffc6d07900", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15413, "upload_time": "2012-03-14T13:22:46", "url": "https://files.pythonhosted.org/packages/2a/ac/815f1edb29670190b0edbad7900ecd032659d6f09dfc8f12406259e14072/plone.multilingual-0.2b3.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "26f6746dc02611804a6767835c06c9d5", "sha256": "71a10038468f3146f9cccf9c11b336124f932c561e4339a2f1a96ae22afaa6c3" }, "downloads": -1, "filename": "plone.multilingual-1.0-py2.7.egg", "has_sig": false, "md5_digest": "26f6746dc02611804a6767835c06c9d5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 45277, "upload_time": "2013-04-16T21:21:38", "url": "https://files.pythonhosted.org/packages/1b/0d/8ef335cfb84f516314e5a55cb8bfc1178042f3762a45021492e342d9c002/plone.multilingual-1.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "8c5d156c11d094556625a6087aa617ea", "sha256": "acee3df99d86428eaa05018a72599b5f041724f32ee20c63809267ec7f2d5a39" }, "downloads": -1, "filename": "plone.multilingual-1.0.tar.gz", "has_sig": false, "md5_digest": "8c5d156c11d094556625a6087aa617ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19494, "upload_time": "2013-04-16T21:21:34", "url": "https://files.pythonhosted.org/packages/63/17/782dacdf0671b854999544754127e3571f71893410772be0100af463954f/plone.multilingual-1.0.tar.gz" } ], "1.0b1": [ { "comment_text": "", "digests": { "md5": "409172cc8f6bd5a95c9a100917ec47f0", "sha256": "2c174faa46a26d365ab1afb1e7c341f640e6343851e0592a1b437d2fa15b47ca" }, "downloads": -1, "filename": "plone.multilingual-1.0b1-py2.7.egg", "has_sig": false, "md5_digest": "409172cc8f6bd5a95c9a100917ec47f0", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 32433, "upload_time": "2012-04-18T18:47:47", "url": "https://files.pythonhosted.org/packages/2a/0e/0f6e27762acf95f1699706a47abbe506fdb199a9ac0bf3820c50445784f2/plone.multilingual-1.0b1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "85eb44ca2692977b56b4b7baec5dc8cc", "sha256": "3ba7965abea8b54b366bb85590ac33e93d53ed215500a2a6aae517e845680fe1" }, "downloads": -1, "filename": "plone.multilingual-1.0b1.tar.gz", "has_sig": false, "md5_digest": "85eb44ca2692977b56b4b7baec5dc8cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16255, "upload_time": "2012-04-18T18:47:45", "url": "https://files.pythonhosted.org/packages/a7/1c/4087adb9a160a5fa60eefac4f6e32c10caa2528d1de15d721019698dae39/plone.multilingual-1.0b1.tar.gz" } ], "1.0b2": [ { "comment_text": "", "digests": { "md5": "8e8318726e07d459f875d512e8d2dff5", "sha256": "e19efb28532849b0acb8c3fe8c25f14d4290e40a6e56636df7adcd90d7da6aa3" }, "downloads": -1, "filename": "plone.multilingual-1.0b2-py2.7.egg", "has_sig": false, "md5_digest": "8e8318726e07d459f875d512e8d2dff5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 32533, "upload_time": "2012-07-10T00:42:33", "url": "https://files.pythonhosted.org/packages/56/6a/01ac7c7f0ff86f9a9a57612dfc9eb41950de6cee49d7cbaa9617ab0c1e1b/plone.multilingual-1.0b2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "4e905642a093573f4cc533f945e96c38", "sha256": "55f2250bf18b2682fe17ad998b9878cd0e90cefb21ecde7ff2f1630e9c3041b8" }, "downloads": -1, "filename": "plone.multilingual-1.0b2.tar.gz", "has_sig": false, "md5_digest": "4e905642a093573f4cc533f945e96c38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13897, "upload_time": "2012-07-10T00:42:31", "url": "https://files.pythonhosted.org/packages/cf/b3/5fac5733b3caa475cf65218d20a3a7904d5641cdf7ba93014865f7867afa/plone.multilingual-1.0b2.tar.gz" } ], "1.0b3": [ { "comment_text": "", "digests": { "md5": "0b0c4145b6c8df3483b6ad1b42d47b8b", "sha256": "a14019df6de0222bc53081fa5e9d20007447f9d8bf84fa15d91b317ddbbca1d3" }, "downloads": -1, "filename": "plone.multilingual-1.0b3.tar.gz", "has_sig": false, "md5_digest": "0b0c4145b6c8df3483b6ad1b42d47b8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15878, "upload_time": "2012-10-04T10:07:48", "url": "https://files.pythonhosted.org/packages/3d/de/577e895ba6c690d517b848fe7d65575f5fb213a9cf02100ab58588b06a8f/plone.multilingual-1.0b3.tar.gz" } ], "1.0rc1": [ { "comment_text": "", "digests": { "md5": "dfbdfa1b7fd69e03c16799281e97f45c", "sha256": "d283c83b20a4ef2260fd90f58d21bb48618ae7686380249b15820e904fd73385" }, "downloads": -1, "filename": "plone.multilingual-1.0rc1.tar.gz", "has_sig": false, "md5_digest": "dfbdfa1b7fd69e03c16799281e97f45c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18993, "upload_time": "2013-01-26T13:54:16", "url": "https://files.pythonhosted.org/packages/de/48/08a9f1521409e77f60f970eb78caf4bce4483f44740e1ffbd541270e5a3c/plone.multilingual-1.0rc1.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "0602532636384033e0acb2deeb59a63a", "sha256": "854f33aba57d80852fad039bcc124a4a18b4dc3cff868af4b7f84666bae8bc35" }, "downloads": -1, "filename": "plone.multilingual-1.1-py2.7.egg", "has_sig": false, "md5_digest": "0602532636384033e0acb2deeb59a63a", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 45485, "upload_time": "2013-06-19T16:21:39", "url": "https://files.pythonhosted.org/packages/89/6f/7bf9c544472f0edf35179872fe3cac8917132b1a4af05b08739cee03d8b1/plone.multilingual-1.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "be2b52bf78caf570c8c099943a97f721", "sha256": "cb56356e0e50ce2e4eb189aab9c79c5af523a6b0136d6fc05f9c95949bb8ec76" }, "downloads": -1, "filename": "plone.multilingual-1.1.tar.gz", "has_sig": false, "md5_digest": "be2b52bf78caf570c8c099943a97f721", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19998, "upload_time": "2013-06-19T16:21:25", "url": "https://files.pythonhosted.org/packages/fb/d7/7acb2647d362d4d2ed1eecc931f778395ff8b6c5c90347cb7eae576b5343/plone.multilingual-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "1cdc7f31489192af8b29634b298a78f0", "sha256": "1738efae97365de61243ef313fdf48193892666d9163a501af5c51aade62853c" }, "downloads": -1, "filename": "plone.multilingual-1.1.1-py2.7.egg", "has_sig": false, "md5_digest": "1cdc7f31489192af8b29634b298a78f0", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 45802, "upload_time": "2013-07-03T21:00:26", "url": "https://files.pythonhosted.org/packages/20/f2/91942c8ee0a82015cc4e20013ba937979e410264b6998d001fe02c1f81ea/plone.multilingual-1.1.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "33035e99f297b4c80d1fb17e2d359191", "sha256": "e47fceed196ace0c66c464b2257947895f6e9ef21845111ee3a28fe2f01b9edf" }, "downloads": -1, "filename": "plone.multilingual-1.1.1.tar.gz", "has_sig": false, "md5_digest": "33035e99f297b4c80d1fb17e2d359191", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20396, "upload_time": "2013-07-03T21:00:22", "url": "https://files.pythonhosted.org/packages/1e/e4/71a444ceea35fbf8da97ac06d853b3a5be1da64b5c19aaf0181f849ef33e/plone.multilingual-1.1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "8827778589bf13cc74a354228e864e87", "sha256": "e5553ac8085c96bbf056088e40082e58c0dcc9b97739d134c3a9c00629aaea4e" }, "downloads": -1, "filename": "plone.multilingual-1.2-py2.7.egg", "has_sig": false, "md5_digest": "8827778589bf13cc74a354228e864e87", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 46132, "upload_time": "2013-09-24T08:04:55", "url": "https://files.pythonhosted.org/packages/d9/89/293fc58c2cffa6591e0b9099f59dac2b0397e6bbeb416029de85cf85dd25/plone.multilingual-1.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "7ab5abd22e76e98307b52ca75e7a7dd7", "sha256": "9675b32f880e3c1825ca0f870d00315c39522162bdd9422a384ad03df9eb6c17" }, "downloads": -1, "filename": "plone.multilingual-1.2.tar.gz", "has_sig": false, "md5_digest": "7ab5abd22e76e98307b52ca75e7a7dd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20528, "upload_time": "2013-09-24T08:04:45", "url": "https://files.pythonhosted.org/packages/f0/21/f328bebdc1930a022874f7dd559390360ed2f28a6598ab212ce34eca1fd2/plone.multilingual-1.2.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "466ea2b1531fa7167ef64946f3465c29", "sha256": "69168cc56c10e93c736d986a789ece4df949108cbc36c4feb2fdd0c424dea708" }, "downloads": -1, "filename": "plone.multilingual-1.2.1-py2.7.egg", "has_sig": false, "md5_digest": "466ea2b1531fa7167ef64946f3465c29", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 46214, "upload_time": "2013-10-16T00:45:14", "url": "https://files.pythonhosted.org/packages/7f/04/ef4a9ce189e23b9a2e39493ce6383d0e1eac89b446f3b3281b052179162b/plone.multilingual-1.2.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "d999fd657b494ed5d4f2c0f993f8b1c0", "sha256": "4c8bf19e4d2d6e73791c3b967fe972dba1996692dfb055e5ef1e96d1471911f6" }, "downloads": -1, "filename": "plone.multilingual-1.2.1.tar.gz", "has_sig": false, "md5_digest": "d999fd657b494ed5d4f2c0f993f8b1c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20733, "upload_time": "2013-10-16T00:45:24", "url": "https://files.pythonhosted.org/packages/d4/82/98290e361abf3ddfa46e4db5da7172f024a301eed0b3f9d8d1efc99202f8/plone.multilingual-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "466ea2b1531fa7167ef64946f3465c29", "sha256": "69168cc56c10e93c736d986a789ece4df949108cbc36c4feb2fdd0c424dea708" }, "downloads": -1, "filename": "plone.multilingual-1.2.1-py2.7.egg", "has_sig": false, "md5_digest": "466ea2b1531fa7167ef64946f3465c29", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 46214, "upload_time": "2013-10-16T00:45:14", "url": "https://files.pythonhosted.org/packages/7f/04/ef4a9ce189e23b9a2e39493ce6383d0e1eac89b446f3b3281b052179162b/plone.multilingual-1.2.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "d999fd657b494ed5d4f2c0f993f8b1c0", "sha256": "4c8bf19e4d2d6e73791c3b967fe972dba1996692dfb055e5ef1e96d1471911f6" }, "downloads": -1, "filename": "plone.multilingual-1.2.1.tar.gz", "has_sig": false, "md5_digest": "d999fd657b494ed5d4f2c0f993f8b1c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20733, "upload_time": "2013-10-16T00:45:24", "url": "https://files.pythonhosted.org/packages/d4/82/98290e361abf3ddfa46e4db5da7172f024a301eed0b3f9d8d1efc99202f8/plone.multilingual-1.2.1.tar.gz" } ] }