{"id":22056016,"url":"https://github.com/intelligenia/modeltranslation","last_synced_at":"2025-05-12T15:47:10.606Z","repository":{"id":57442664,"uuid":"49886977","full_name":"intelligenia/modeltranslation","owner":"intelligenia","description":"Django module to ease the translation of models.","archived":false,"fork":false,"pushed_at":"2017-03-15T18:54:21.000Z","size":50,"stargazers_count":5,"open_issues_count":0,"forks_count":5,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-05-07T18:56:28.611Z","etag":null,"topics":["django","dynamic-translations","language","tinymce","translated-fields","translation"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/intelligenia.png","metadata":{"files":{"readme":"README.es.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-18T15:51:27.000Z","updated_at":"2025-04-07T14:27:17.000Z","dependencies_parsed_at":"2022-09-26T17:21:17.906Z","dependency_job_id":null,"html_url":"https://github.com/intelligenia/modeltranslation","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intelligenia%2Fmodeltranslation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intelligenia%2Fmodeltranslation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intelligenia%2Fmodeltranslation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intelligenia%2Fmodeltranslation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/intelligenia","download_url":"https://codeload.github.com/intelligenia/modeltranslation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253767811,"owners_count":21961190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","dynamic-translations","language","tinymce","translated-fields","translation"],"created_at":"2024-11-30T16:12:17.539Z","updated_at":"2025-05-12T15:47:10.582Z","avatar_url":"https://github.com/intelligenia.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# modeltranslation\n\nEnglish version in [README.md](README.md).\n\n## Introducción\n\nEsta aplicación de [Django](https://www.djangoproject.com/) permite realizar traducciones\nde los campos de los modelos y las almacena en una tabla de la BD.\nDe esta forma, cada vez que se ejecute el método save() se genera una entrada incompleta en una tabla. Luego el\ntraductor podrá traducir esas entradas incompletas.\n\nTú no deberías tocar el modelo FieldTranslation, pero si lo deseas puedes leer el código.\n\nTodo el código está en el siguiente repositori de github: [https://github.com/intelligenia/modeltranslation](https://github.com/intelligenia/modeltranslation)\n\n## Instrucciones para usar la aplicación\n\n### Instalación.\n\nEsta aplicación depende de [django-cuser](https://pypi.python.org/pypi/django-cuser), y de [TinyMCE](https://pypi.python.org/pypi/django-tinymce)\npor lo que deberás instalarlo antes y ponerlo encima en el listado de aplicaciones instaladas.\n\nPuedes usar pip para instalar django-cuser.\n\nAhora sí, para instalar la aplicación modeltranslation en settings.py debes\nincluirla en el listado de aplicaciones instaladas.\n\nINSTALLED_APPS = (\n  \"tinymce\",\n  \"cuser\",\n  \"modeltranslation\"\n)\n\n###\tAñadir IS_MONOLINGUAL\n\nUsar la opción IS_MONOLINGUAL=False en settings.py para indicar que el sitio tiene varios idiomas:\n\n```python\nIS_MONOLINGUAL=False\n```\n\n### Añadir TRANSLATABLE_MODEL_MODULES\n\nAñadir en el fichero settings.py un TRANSLATABLE_MODEL_MODULES con una lista de las rutas de los modelos que van a ser traducidas. Por ejemplo:\n\t\n```python\nTRANSLATABLE_MODEL_MODULES = [\"app1.models\", \"app2.models\", \"fees.models\", \"menus.models\", ...]\n```\n\n### Importar addtranslations en los modelos\n\nImportar addtranslations en el fichero de modelos de tu aplicación:\n\n```python\nfrom modeltranslation.translation import addtranslations\n```\n\nLuego, tendrás que realiza esta llamada al FINAL de ese mismo fichero de modelos:\n\n```python\naddtranslations(__name__)\n```\n\nEsta llamada lo que hace es añadir un observador que se encarga de guardar\nlas traducciones cuando se ejecuta el método **save** del modelo.\n\n## Añadir translatable_fields a los modelos\n\nModifica los modelos de tu aplicación incluyendo un campo \"translatable_fields\" en el Meta con una lista de los atributos a traducir.\n\nPor ejemplo:\n\n```python\nfrom django.db import models\n\nclass Event(models.Model):\n\n\tname = models.CharField(blank=False, max_length=150, verbose_name=u\"Nombre\", help_text=u\"Nombre del evento.\")\n\tdescription = models.TextField(blank=False, verbose_name=u\"Descripción\", help_text=u\"Descripción larga del evento.\")\n\tshort_description = models.CharField(blank=False, max_length=150, verbose_name=u\"Descripción corta\", help_text=u\"Texto (máximo 150 caracteres) que sirve como descripción breve del evento.\")\n\n\t#...\n\n\t## Metainformación sobre Event\n\tclass Meta:\n\t\tverbose_name = \"evento\"\n\t\tverbose_name_plural = \"eventos\"\n\t\ttranslatable_fields = (\"name\", \"description\", \"short_description\")\n\n```\n### FIN\n\nA partir de este momento, tienes la aplicación de gestión de traducciones\n\n\n## Uso de traducciones en los formularios de modelos\n\nHereda de TranslatableModelForm en tu formulario. Esto hará que se incluyan\nun campo extra por cada campo e idioma y será el encargado de guardar los\ndatos una vez que se guarde el objeto.\n\n```python\nfrom modeltranslation.forms import TranslatableModelForm\n\nclass EventForm(TranslatableModelForm):\n\tpass\n```\n\nSi quieres modificar alguno de los campos en el método __init__ del\nformulario, tendrás que volver a llamar al método de TranslatableModelForm\nencargado de crear los nuevos campos. Por ejemplo:\n\n```python\n\t# Método __init__ del formulario EventForm\n\tdef __init__(self, event, *args, **kwargs):\n\t\tsuper(EventForm, self).__init__(*args, **kwargs)\n\t\t\n\t\t# Inclusión del editor TinyMCE, queremos que se muestre el editor\n\t\t# en los campos extra generados por el sistema de traducciones\n\t\tself.fields[\"description\"].widget = TinyMCE()\n\t\t\n\t\t# Por lo que hemos de añadir las traducciones a mano\n\t\tself._add_translation_form_fields()\n```\n\n## Traducciones dinámicas en las plantilla de Django\n\n1. Incluir los filtros en cada plantilla que use traducciones. Nótese\nque se ha de incluir en TODAS las que usen los nuevos filtros, olvídate\nde la herencia.\n\n```django\n{% load modeltranslation_tags %}\n```\n\n2. Usar el filtro \"_\" (sí, se llama guionbajo) sobre el objeto con\natributos traducibles pasándole como parámetro el atributo a traducir.\n\nPor ejemplo: \n\n```django\n{{ event|_:\"name\" }} {# Traduce el nombre del evento #}\n{{ event.area|_:\"name\" }} {# Traduce el nombre del área #}\n```\n\n## Traducciones dinámicas en el código\n\nPara obtener automáticamente un atributo traducido, puedes hacer uso\ndel método **get_trans_attr** inyectados en los modelos traducibles:\n\nPor ejemplo: \n```python\n\n# Nombre del evento en el idioma por defecto\noriginal_event_name event.name\n\n# Nombre del evento traducido\ntranslated_event_name event.get_trans_attr(\"name\")\n```\n\n## Contacto, dudas y sugerencias\n\n- Crea una incidencia en el respositorio.\n- Escribe al autor en diegoREMOVE_THIS@intelligeniaREMOVE_THIS.com\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintelligenia%2Fmodeltranslation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintelligenia%2Fmodeltranslation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintelligenia%2Fmodeltranslation/lists"}