Browse Source
add django-rosetta to make translators' lives easier:
add django-rosetta to make translators' lives easier:
A Django application that eases the translation process of your Django projects <http://code.google.com/p/django-rosetta/>Natenom/support-murmur-13-1446181288462
Michael Ziegler
15 years ago
35 changed files with 4009 additions and 0 deletions
-
37COPYRIGHT
-
36pyweb/rosetta/__init__.py
-
24pyweb/rosetta/conf/__init__.py
-
61pyweb/rosetta/conf/settings.py
-
BINpyweb/rosetta/locale/de/LC_MESSAGES/django.mo
-
174pyweb/rosetta/locale/de/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/es/LC_MESSAGES/django.mo
-
171pyweb/rosetta/locale/es/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/fr/LC_MESSAGES/django.mo
-
172pyweb/rosetta/locale/fr/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/hu/LC_MESSAGES/django.mo
-
165pyweb/rosetta/locale/hu/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/it/LC_MESSAGES/django.mo
-
168pyweb/rosetta/locale/it/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/nl/LC_MESSAGES/django.mo
-
171pyweb/rosetta/locale/nl/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/pl/LC_MESSAGES/django.mo
-
170pyweb/rosetta/locale/pl/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/ru/LC_MESSAGES/django.mo
-
163pyweb/rosetta/locale/ru/LC_MESSAGES/django.po
-
BINpyweb/rosetta/locale/uk/LC_MESSAGES/django.mo
-
162pyweb/rosetta/locale/uk/LC_MESSAGES/django.po
-
26pyweb/rosetta/models.py
-
1443pyweb/rosetta/polib.py
-
114pyweb/rosetta/poutil.py
-
41pyweb/rosetta/templates/rosetta/base.html
-
28pyweb/rosetta/templates/rosetta/css/rosetta.css
-
57pyweb/rosetta/templates/rosetta/js/rosetta.js
-
45pyweb/rosetta/templates/rosetta/languages.html
-
125pyweb/rosetta/templates/rosetta/pofile.html
-
24pyweb/rosetta/templatetags/__init__.py
-
77pyweb/rosetta/templatetags/rosetta.py
-
32pyweb/rosetta/urls.py
-
322pyweb/rosetta/views.py
-
1pyweb/settings.py
@ -0,0 +1,36 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
||||
|
VERSION = (0, 5, 1) |
||||
|
|
||||
|
def get_version(svn=False, limit=3): |
||||
|
"Returns the version as a human-format string." |
||||
|
v = '.'.join([str(i) for i in VERSION[:limit]]) |
||||
|
if svn and limit >= 3: |
||||
|
from django.utils.version import get_svn_revision |
||||
|
import os |
||||
|
svn_rev = get_svn_revision(os.path.dirname(__file__)) |
||||
|
if svn_rev: |
||||
|
v = '%s.%s' % (v, svn_rev) |
||||
|
return v |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
@ -0,0 +1,61 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
||||
|
from django.conf import settings |
||||
|
|
||||
|
# Number of messages to display per page. |
||||
|
MESSAGES_PER_PAGE = getattr(settings,'ROSETTA_MESSAGES_PER_PAGE',10) |
||||
|
|
||||
|
|
||||
|
# Enable Google translation suggestions |
||||
|
ENABLE_TRANSLATION_SUGGESTIONS = getattr(settings,'ROSETTA_ENABLE_TRANSLATION_SUGGESTIONS',True) |
||||
|
|
||||
|
# Displays this language beside the original MSGID in the admin |
||||
|
MAIN_LANGUAGE = getattr(settings,'ROSETTA_MAIN_LANGUAGE', None) |
||||
|
|
||||
|
|
||||
|
""" |
||||
|
When running WSGI daemon mode, using mod_wsgi 2.0c5 or later, this setting |
||||
|
controls whether the contents of the gettext catalog files should be |
||||
|
automatically reloaded by the WSGI processes each time they are modified. |
||||
|
|
||||
|
Notes: |
||||
|
|
||||
|
* The WSGI daemon process must have write permissions on the WSGI script file |
||||
|
(as defined by the WSGIScriptAlias directive.) |
||||
|
* WSGIScriptReloading must be set to On (it is by default) |
||||
|
* For performance reasons, this setting should be disabled in production environments |
||||
|
* When a common rosetta installation is shared among different Django projects, |
||||
|
each one running in its own distinct WSGI virtual host, you can activate |
||||
|
auto-reloading in individual projects by enabling this setting in the project's |
||||
|
own configuration file, i.e. in the project's settings.py |
||||
|
|
||||
|
Refs: |
||||
|
|
||||
|
* http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode |
||||
|
* http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIReloadMechanism |
||||
|
|
||||
|
""" |
||||
|
WSGI_AUTO_RELOAD = getattr(settings,'ROSETTA_WSGI_AUTO_RELOAD', False) |
||||
|
|
@ -0,0 +1,174 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"PO-Revision-Date: 2008-06-16 10:11+0100\n" |
||||
|
"Last-Translator: Martin Mahner <martin@mahner.org>\n" |
||||
|
"Language-Team: patrick lauber <patrick.lauber@divio.ch>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
||||
|
"X-Poedit-Language: German\n" |
||||
|
"X-Poedit-Country: SWITZERLAND\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Home" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Sprachwahl" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Fortschritt" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Texte" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Übersetzt" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "Unscharf" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Veraltet" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Datei" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "Nichts zu übersetzen!" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
"Sie haben keine Sprachen in der Einstellungsdatei definiert oder bis jetzt " |
||||
|
"noch keine Übersetzungskataloge generiert." |
||||
|
|
||||
|
# python-format |
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
"Unter <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</a> finden " |
||||
|
"Sie eine Anleitung, wie sie Internationalisierung in Ihrem Projekt " |
||||
|
"einrichten." |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Wähle eine andere Datei" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Laden sie diesen Katalog herunter" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Fortschritt: %(percent_translated)s%" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "" |
||||
|
"Datei ist schreibgeschützt: Laden Sie die Datei herunter wenn sie mit dem " |
||||
|
"Editieren fertig sind!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Englisch" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Übersetze in %(rosetta_i18n_lang_name)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Anzeige:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Nur unübersetzte" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Nur übersetzte" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "Nur unscharfe" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "Alle" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Suchen" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Los" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "Original" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Gefunden in" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "vorschlagen" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "%(more_count)s mehr" |
||||
|
msgstr[1] "%(more_count)s mehr" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Speichern und nächsten Block übersetzen" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Zur Seite:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Anzeigen:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s Text" |
||||
|
msgstr[1] "%(hits)s/%(message_number)s Texte" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Beide" |
@ -0,0 +1,171 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: PACKAGE VERSION\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"PO-Revision-Date: 2008-11-30 12:12\n" |
||||
|
"Last-Translator: <antonio.mele@django.es>\n" |
||||
|
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"X-Translated-Using: django-rosetta 0.4.RC2\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Inicio" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Selección de idioma" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Progreso" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Mensajes" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Traducido" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "Velloso" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Obsoleto" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Archivo" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "¡Nada que traducir!" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
"No has especificado ningún idioma en tu archivo de settings o no has " |
||||
|
"generado todavía un batch para traducción de catálogos." |
||||
|
|
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
"Por favor visita la <a href=\"%(i18n_doc_link)s\">Documentación de Django " |
||||
|
"sobre I18N</a> para obtener una guía sobre cómo añadir internacionalización " |
||||
|
"a tu proyecto." |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Selecciona otro archivo" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Descarga este catálogo" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Progreso: %(percent_translated)s%" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "" |
||||
|
"El archivo está en modo lectura: ¡Descarga el archivo cuando termines de " |
||||
|
"editarlo!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Inglés" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Traducir al %(rosetta_i18n_lang_name)s " |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Pantalla:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Sin traducir sólo" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Traducidos sólo" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "Vellosos sólo" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Búsqueda" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Ir" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Ocurrencia(s)" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "sugerir" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "%(more_count)s más" |
||||
|
msgstr[1] "%(more_count)s más" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Guardar y traducir siguiente bloque" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Ir a la página:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Mostrando:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s mensaje" |
||||
|
msgstr[1] "%(hits)s/%(message_number)s mensajes" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Ambos" |
@ -0,0 +1,172 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"PO-Revision-Date: 2008-09-22 11:02\n" |
||||
|
"Last-Translator: Admin Admin <admin@admin.com>\n" |
||||
|
"Language-Team: French <LL@li.org>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"X-Translated-Using: django-rosetta 0.4.RC2\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Accueil" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Sélection de la langue" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "Application" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Progression" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Messages" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Traduits" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "Flous" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Obsolètes" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Fichier" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "Rien à Traduire!" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
"Vous n'avez spécifié aucune langue dans votre fichier de configuration, ou " |
||||
|
"n'avez pas encore généré le catalogue initial de traductions pour votre " |
||||
|
"projet." |
||||
|
|
||||
|
# python-format |
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
"Veuillez vous référer à la <a href=\"%(i18n_doc_link)s\">documentation sur " |
||||
|
"l'internationalisation de Django</a> pour un guide sur comment activer et " |
||||
|
"configurer la traduction de votre projet." |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Choisir un autre fichier" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Télécharger ce catalogue" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Progression: %(percent_translated)s%" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "" |
||||
|
"Fichier en seule lecture: télécharger le fichier à la fin de l'édition!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Anglais" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Traduire en %(rosetta_i18n_lang_name)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Afficher:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Non-traduits uniquement" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Traduits uniquement" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "Flous uniquement" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "Tous" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Recherche" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Go" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "Original" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Occurrences(s)" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "suggérer" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "%(more_count)s de plus" |
||||
|
msgstr[1] "%(more_count)s de plus" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Sauver et traduire le prochain bloc" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Passer à la page:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Affichés:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s message" |
||||
|
msgstr[1] " %(hits)s/%(message_number)s messages" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Les deux" |
@ -0,0 +1,165 @@ |
|||||
|
# Copyright (C) 2008 |
||||
|
# Gergely Kontra <pihentagy+rosetta@gmail.com>, 2008. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"PO-Revision-Date: 2008-10-09 19:08+0100\n" |
||||
|
"Last-Translator: Gergely Kontra <pihentagy@yahoo.com>\n" |
||||
|
"Language-Team: nomail <hu@example.org>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"X-Translated-Using: django-rosetta 0.4.RC2\n" |
||||
|
"Plural-Forms: nplurals=1; plural=0;\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Főoldal" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Nyelvválasztás" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Állapot" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Üzenet" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Lefordítva" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Elavult" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Fájl" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "Nincs mit fordítani!" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
"Nincs beállítva egyetlen nyelv sem van nem hozott létre egy fordítási " |
||||
|
"katalóguskoteget." |
||||
|
|
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
"Projekted többnyelvűvé alakításához lásd a <a href=\"%(i18n_doc_link)s" |
||||
|
"\">Django I18N dokumentációt</a>!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Másik fájl választása" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Katalógus letöltése" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "%(percent_translated)s% kész" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "A fájl írásvédett: töltse le a katalógust, ha végzett!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Angol" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Fordítsa %(rosetta_i18n_lang_name)s nyelvre" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Szűrés:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Fordításra vár" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Lefordított" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Keresés" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Keress" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Előfordulások" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "ajánl" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, fuzzy, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "még %(more_count)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Mentés" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Ugorj erre az oldalra:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Szűrés:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, fuzzy, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s üzenet" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Minden" |
@ -0,0 +1,168 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"Last-Translator: Marco Bonetti <mbi@mbi.com>\n" |
||||
|
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Inizio" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Selezione della lingua" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "Applicazione" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Progressione" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Messaggio" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Tradotto" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Obsoleto" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "File" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "Nulla da tradurre!" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
"Non avete specificato nessuna lingua nelle vostre impostazioni, o non avete " |
||||
|
"ancore generato un catalogo iniziale da tradurre." |
||||
|
|
||||
|
# python-format |
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
"Vogliate riferirvi alla <a href=\"%(i18n_doc_link)s\">documentazione " |
||||
|
"sull'internazionalizzazione di Django</a> per una giuda su come impostare le " |
||||
|
"traduzioni per il vostro progetto." |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Scegliere un altro file" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Scaricare il catalogo" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Progressione: %(percent_translated)s%" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "file in solo lettura: scaricare il file alla fine dell'edizione!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Inglese" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Tradurre verso il %(rosetta_i18n_lang_name)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Mostra:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Solo non tradotti" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Solo tradotti" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "Solo fuzzy" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "Tutti" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Cercare" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Via" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "Originale" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Occorrenze" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "suggerire" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "un altro" |
||||
|
msgstr[1] "ancora %(more_count)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Salvare e tradurre il prossimo blocco" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Passare alla pagina:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Mostrato:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s messaggio" |
||||
|
msgstr[1] "%(hits)s/%(message_number)s messaggi" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Entrambi" |
@ -0,0 +1,171 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the rosetta package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"PO-Revision-Date: 2008-06-05 17:06+0200\n" |
||||
|
"Last-Translator: Joost Cassee <cassee@gmail.com>\n" |
||||
|
"Language-Team: Joost Cassee <cassee@gmail.com>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Voorpagina" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Taalselectie" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Voortgang" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Berichten" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Vertaald" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Niet meer gebruikt" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Bestand" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "Niets te vertalen!" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
"U heeft geen talen gespecificeerd in het bestand settings.py of nog geen " |
||||
|
"catalogus gegenereerd." |
||||
|
|
||||
|
# python-format |
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
"Zie <a href=\"%(i18n_doc_link)s\">Django's I18N documentatie</a> (Engels) " |
||||
|
"voor meer informatie over internationalisatie." |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Selecteer een ander bestand" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Download deze catalogus" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Voortgang: %(percent_translated)s%" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "" |
||||
|
"Dit is bestand is alleen-lezen; download dit bestand wanneer u klaar bent " |
||||
|
"met bewerken!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Engels" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Vertalen in het %(rosetta_i18n_lang_name)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Beeld:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Alleen onvertaald" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Alleen vertaald" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Zoeken" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Ga" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Gevonden in" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "" |
||||
|
msgstr[1] "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Opslaan en volgende blok vertalen" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Snel naar pagina:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Tonen:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s bericht" |
||||
|
msgstr[1] "%(hits)s/%(message_number)s berichten" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Beide" |
@ -0,0 +1,170 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"PO-Revision-Date: 2008-09-12 12:16\n" |
||||
|
"Last-Translator: <tomasz@napierala.org>\n" |
||||
|
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"X-Translated-Using: django-rosetta 0.4.RC2\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Początek" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Wybór języka" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Postęp" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Komunikaty" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Przetłumaczone" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Przestarzałe" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Plik" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "Nie ma nic do przetłumaczenia!" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
"Nie podałeś żadnych języków w plikach ustawień, lub nie wygenerowałeś " |
||||
|
"jeszcze katalogów do tłumaczeń." |
||||
|
|
||||
|
# python-format |
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
"Sprawdź pomoc dotyczącą <a href=\"%(i18n_doc_link)s\">internacjonalizacji " |
||||
|
"Django I18N </a>, aby znaleźć dokumentację na temat internacjonalizacji " |
||||
|
"twojego projektu." |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Wybierz inny plik" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Pobierz ten katalog" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Postęp: %(percent_translated)s %" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "Plik jest tylko do odczytu: pobierz go kiedy skończysz edytować" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Angielski" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Przetłumacz na %(rosetta_i18n_lang_name)s " |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Wyświetl:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Tylko nieprzetłumaczone" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Tylko przetłumaczone" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Szukaj" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Idź" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Wystąpienie(a)" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "sugeruj" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "%(more_count)s więcej" |
||||
|
msgstr[1] "%(more_count)s więcej" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Zapisz i tłumacz następny blok" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Przejdź do strony:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Wyświetlanie:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s komunikat" |
||||
|
msgstr[1] "%(hits)s/%(message_number)s komunikatów" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Oba" |
@ -0,0 +1,163 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"Last-Translator: Nazar Leush <nazar@pleso.net>\n" |
||||
|
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Начало" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Выбор языка" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Обработано" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Сообщений" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "С переводом" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Устаревших" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Файл" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Выбрать другой файл" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Скачать этот каталог" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Обработано: %(percent_translated)s%" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "" |
||||
|
"Файл только для чтения: загрузите файл после завершения редактирования!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Английский" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Перевод на %(rosetta_i18n_lang_name)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Отображать:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Только без перевода" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Только с переводом" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Поиск" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Вперёд" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Встречается в" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "" |
||||
|
msgstr[1] "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Сохранить и перевести следующий блок" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Перейти к странице:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Отображение:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s сообщение" |
||||
|
msgstr[1] "%(hits)s/%(message_number)s сообщений" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Все" |
@ -0,0 +1,162 @@ |
|||||
|
# SOME DESCRIPTIVE TITLE. |
||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
||||
|
# This file is distributed under the same license as the PACKAGE package. |
||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Rosetta\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2009-10-21 12:21+0200\n" |
||||
|
"Last-Translator: Nazar Leush <nazar@pleso.net>\n" |
||||
|
"Language-Team: LANGUAGE <LL@li.org>\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/pofile.html:13 |
||||
|
msgid "Home" |
||||
|
msgstr "Домівка" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:3 templates/rosetta/languages.html.py:4 |
||||
|
msgid "Language selection" |
||||
|
msgstr "Вибір мови" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:14 |
||||
|
msgid "Application" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:15 |
||||
|
msgid "Progress" |
||||
|
msgstr "Завершено" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:16 |
||||
|
msgid "Messages" |
||||
|
msgstr "Повідомлень" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:17 |
||||
|
msgid "Translated" |
||||
|
msgstr "Перекладено" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:18 templates/rosetta/pofile.html:48 |
||||
|
msgid "Fuzzy" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:19 |
||||
|
msgid "Obsolete" |
||||
|
msgstr "Застарілих" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:20 |
||||
|
msgid "File" |
||||
|
msgstr "Файл" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:41 |
||||
|
msgid "Nothing to translate!" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:42 |
||||
|
msgid "" |
||||
|
"You haven't specified any languages in your settings file, or haven't yet " |
||||
|
"generated a batch of translation catalogs." |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/languages.html:43 |
||||
|
#, python-format |
||||
|
msgid "" |
||||
|
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</" |
||||
|
"a> for a guide on how to set up internationalization for your project." |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:7 |
||||
|
msgid "Pick another file" |
||||
|
msgstr "Вибрати інший файл" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:8 |
||||
|
msgid "Download this catalog" |
||||
|
msgstr "Завантажити цей каталог" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:16 |
||||
|
msgid "Progress: %(percent_translated)s%" |
||||
|
msgstr "Завершено: %(percent_translated)s%" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:17 |
||||
|
msgid "File is read-only: download the file when done editing!" |
||||
|
msgstr "Файл тільки для читання: завантажте файл після завершення редагування!" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:19 |
||||
|
msgid "English" |
||||
|
msgstr "Англійська" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:21 |
||||
|
#, python-format |
||||
|
msgid "Translate into %(rosetta_i18n_lang_name)s" |
||||
|
msgstr "Переклад на %(rosetta_i18n_lang_name)s" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:24 |
||||
|
msgid "Display:" |
||||
|
msgstr "Відображати:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:25 |
||||
|
msgid "Untranslated only" |
||||
|
msgstr "Тільки неперекладені" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:26 |
||||
|
msgid "Translated only" |
||||
|
msgstr "Тільки перекладені" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:27 |
||||
|
msgid "Fuzzy only" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:28 |
||||
|
msgid "All" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:34 |
||||
|
msgid "Search" |
||||
|
msgstr "Пошук" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:36 |
||||
|
msgid "Go" |
||||
|
msgstr "Вперед" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:45 |
||||
|
msgid "Original" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:49 |
||||
|
msgid "Occurrences(s)" |
||||
|
msgstr "Зустрічається в" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:73 |
||||
|
msgid "suggest" |
||||
|
msgstr "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:84 |
||||
|
#, python-format |
||||
|
msgid "%(more_count)s more" |
||||
|
msgid_plural "%(more_count)s more" |
||||
|
msgstr[0] "" |
||||
|
msgstr[1] "" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:96 |
||||
|
msgid "Save and translate next block" |
||||
|
msgstr "Записати і перекласти наступний блок" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:100 |
||||
|
msgid "Skip to page:" |
||||
|
msgstr "Перейти до сторінки:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:113 |
||||
|
msgid "Displaying:" |
||||
|
msgstr "Відображення:" |
||||
|
|
||||
|
#: templates/rosetta/pofile.html:115 |
||||
|
#, python-format |
||||
|
msgid "%(hits)s/%(message_number)s message" |
||||
|
msgid_plural "%(hits)s/%(message_number)s messages" |
||||
|
msgstr[0] "%(hits)s/%(message_number)s повідомлення" |
||||
|
msgstr[1] "%(hits)s/%(message_number)s повідомлень" |
||||
|
|
||||
|
#~ msgid "Both" |
||||
|
#~ msgstr "Всі" |
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
||||
|
from django.db import models |
||||
|
# Create your models here. |
1443
pyweb/rosetta/polib.py
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,114 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
||||
|
import re, string, sys, os |
||||
|
from django.conf import settings |
||||
|
try: |
||||
|
set |
||||
|
except NameError: |
||||
|
from sets import Set as set # Python 2.3 fallback |
||||
|
|
||||
|
def find_pos(lang, include_djangos = False, include_rosetta = False): |
||||
|
""" |
||||
|
scans a couple possible repositories of gettext catalogs for the given |
||||
|
language code |
||||
|
|
||||
|
""" |
||||
|
|
||||
|
paths = [] |
||||
|
|
||||
|
# project/locale |
||||
|
parts = settings.SETTINGS_MODULE.split('.') |
||||
|
project = __import__(parts[0], {}, {}, []) |
||||
|
paths.append(os.path.join(os.path.dirname(project.__file__), 'locale')) |
||||
|
|
||||
|
# django/locale |
||||
|
if include_djangos: |
||||
|
paths.append(os.path.join(os.path.dirname(sys.modules[settings.__module__].__file__), 'locale')) |
||||
|
|
||||
|
# settings |
||||
|
for localepath in settings.LOCALE_PATHS: |
||||
|
if os.path.isdir(localepath): |
||||
|
paths.append(localepath) |
||||
|
|
||||
|
# project/app/locale |
||||
|
for appname in settings.INSTALLED_APPS: |
||||
|
if 'rosetta' == appname and include_rosetta == False: |
||||
|
continue |
||||
|
|
||||
|
p = appname.rfind('.') |
||||
|
if p >= 0: |
||||
|
app = getattr(__import__(appname[:p], {}, {}, [appname[p+1:]]), appname[p+1:]) |
||||
|
else: |
||||
|
app = __import__(appname, {}, {}, []) |
||||
|
|
||||
|
apppath = os.path.join(os.path.dirname(app.__file__), 'locale') |
||||
|
|
||||
|
if os.path.isdir(apppath): |
||||
|
paths.append(apppath) |
||||
|
|
||||
|
ret = set() |
||||
|
rx=re.compile(r'(\w+)/../\1') |
||||
|
langs = (lang,) |
||||
|
if u'-' in lang: |
||||
|
_l,_c = map(lambda x:x.lower(),lang.split(u'-')) |
||||
|
langs += (u'%s_%s' %(_l, _c), u'%s_%s' %(_l, _c.upper()), ) |
||||
|
elif u'_' in lang: |
||||
|
_l,_c = map(lambda x:x.lower(),lang.split(u'_')) |
||||
|
langs += (u'%s-%s' %(_l, _c), u'%s-%s' %(_l, _c.upper()), ) |
||||
|
|
||||
|
for path in paths: |
||||
|
for lang_ in langs: |
||||
|
dirname = rx.sub(r'\1', '%s/%s/LC_MESSAGES/' %(path,lang_)) |
||||
|
for fn in ('django.po','djangojs.po',): |
||||
|
if os.path.isfile(dirname+fn): |
||||
|
ret.add(os.path.abspath(dirname+fn)) |
||||
|
return list(ret) |
||||
|
|
||||
|
def pagination_range(first,last,current): |
||||
|
r = [] |
||||
|
|
||||
|
r.append(first) |
||||
|
if first + 1 < last: r.append(first+1) |
||||
|
|
||||
|
if current -2 > first and current -2 < last: r.append(current-2) |
||||
|
if current -1 > first and current -1 < last: r.append(current-1) |
||||
|
if current > first and current < last: r.append(current) |
||||
|
if current + 1 < last and current+1 > first: r.append(current+1) |
||||
|
if current + 2 < last and current+2 > first: r.append(current+2) |
||||
|
|
||||
|
if last-1 > first: r.append(last-1) |
||||
|
r.append(last) |
||||
|
|
||||
|
r = list(set(r)) |
||||
|
r.sort() |
||||
|
prev = 10000 |
||||
|
for e in r[:]: |
||||
|
if prev + 1 < e: |
||||
|
try: |
||||
|
r.insert(r.index(e), '...') |
||||
|
except ValueError: |
||||
|
pass |
||||
|
prev = e |
||||
|
return r |
@ -0,0 +1,41 @@ |
|||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
|
|
||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
||||
|
<head> |
||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> |
||||
|
<link rel="stylesheet" href="{{ADMIN_MEDIA_PREFIX}}css/base.css" type="text/css"/> |
||||
|
<link rel="stylesheet" href="{{ADMIN_MEDIA_PREFIX}}css/forms.css" type="text/css"/> |
||||
|
<link rel="stylesheet" href="{{ADMIN_MEDIA_PREFIX}}css/changelists.css" type="text/css"/> |
||||
|
<style type="text/css" media="screen"> |
||||
|
{% include 'rosetta/css/rosetta.css' %} |
||||
|
</style> |
||||
|
<script src="http://www.google.com/jsapi" type="text/javascript"></script> |
||||
|
<script type="text/javascript"> |
||||
|
//<!-- |
||||
|
google.load("jquery", "1.3"); |
||||
|
{% if ENABLE_TRANSLATION_SUGGESTIONS %}google.load("language", "1");{% endif %} |
||||
|
{% include 'rosetta/js/rosetta.js' %} |
||||
|
//--> |
||||
|
</script> |
||||
|
<title>Rosetta - {% block pagetitle %}{% endblock %}</title> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div id="container"> |
||||
|
<div id="header"> |
||||
|
{% block header %} |
||||
|
<div id="branding"> |
||||
|
<h1 id="site-name"><a href="{% url rosetta-pick-file %}">Rosetta</a> </h1> |
||||
|
</div> |
||||
|
{% endblock %} |
||||
|
</div> |
||||
|
<div class="breadcrumbs">{% block breadcumbs %}{% endblock %}</div> |
||||
|
<div id="content" class="flex"> |
||||
|
{% block main %}{% endblock %} |
||||
|
</div> |
||||
|
<div id="footer" class="breadcumbs"> |
||||
|
<a href="http://code.google.com/p/django-rosetta">Rosetta</a> <span class="version">{{version}}</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,28 @@ |
|||||
|
#user-tools p span { margin-left:2em; } |
||||
|
table{width:100%;} |
||||
|
td.translation label {font-size: 95%;} |
||||
|
td.translation textarea, td.original { font-size:110%;} |
||||
|
td.translation,td.original {width:30%;} |
||||
|
td.original .plural-container { position:relative} |
||||
|
td.translation textarea{ width:98.5%; min-height:25px; margin:2px 0; } |
||||
|
.rtl td.translation textarea { direction: rtl;} |
||||
|
.plural span {display:block; margin:2px 0; position:absolute} |
||||
|
td.location code,td.location a { font-size:95%; display:block;} |
||||
|
td.location code.hide { display:none;} |
||||
|
.submit-row {margin-bottom:0;} |
||||
|
li.nobubble,li.nobubble:hover { background-image:none;} |
||||
|
.object-tools li.active, .object-tools li.active a { color:yellow;} |
||||
|
p.paginator input { float:right;} |
||||
|
p.paginator span.space { margin: 0 0.5em;} |
||||
|
.paginator {text-align:left; border:none; background:transparent; } |
||||
|
.paginator strong { margin-left:1em;} |
||||
|
th.r,td.r {text-align:right;} |
||||
|
th.c,td.c {text-align: center;} |
||||
|
td.original code {font-size:90%; padding: 0 1px; } |
||||
|
tr.row2 td.original code {background-color:#FFB2A5; padding: 0 0.3em;} |
||||
|
tr.row1 td.original code {background-color:#FFB2A5;} |
||||
|
.alert { font-weight:bold;padding:4px 5px 4px 25px; margin-left:1em; color: red; background:transparent url({{ADMIN_MEDIA_PREFIX}}img/admin/icon_alert.gif) 5px .3em no-repeat; } |
||||
|
#footer { clear:both; color:#999; font-size:9px; margin:0 6px; text-align:left;} |
||||
|
#changelist table tbody td:first-child, #changelist table thead th:first-child {text-align: left;} |
||||
|
td.hint {color: #777;} |
||||
|
div.module {margin-bottom: 20px;} |
@ -0,0 +1,57 @@ |
|||||
|
google.setOnLoadCallback(function() { |
||||
|
$('.location a').show().toggle(function() { |
||||
|
$('.hide', $(this).parent()).show(); |
||||
|
}, function() { |
||||
|
$('.hide', $(this).parent()).hide(); |
||||
|
}); |
||||
|
{% if ENABLE_TRANSLATION_SUGGESTIONS %} |
||||
|
$('a.suggest').click(function() { |
||||
|
var a=$(this), str=a.html(); orig=$('.original', a.parents('tr')).html(),trans=$('textarea',a.parent()); |
||||
|
orig = unescape(orig).replace(/<br\s?\/?>/g,'\n').replace(/<code>/g,'').replace(/<\/code>/g,'').replace(/>/g,'>').replace(/</g,'<'); |
||||
|
a.attr('class','suggesting').html('...'); |
||||
|
google.language.translate(orig, "en", '{{rosetta_i18n_lang_code}}', function(result) { |
||||
|
if (!result.error) { |
||||
|
trans.val(unescape(result.translation).replace(/'/g,'\'').replace(/"/g,'"').replace(/%\s+(\([^\)]+\))\s*s/g,' %$1s ')); |
||||
|
a.hide(); |
||||
|
} else { |
||||
|
a.hide().before($('<span class="alert">'+result.error.message+'</span>')); |
||||
|
} |
||||
|
}); |
||||
|
return false; |
||||
|
}); |
||||
|
{% endif %} |
||||
|
$('td.plural').each(function(i) { |
||||
|
var td = $(this), trY = parseInt(td.closest('tr').offset().top); |
||||
|
$('textarea', $(this).closest('tr')).each(function(j) { |
||||
|
var textareaY= parseInt($(this).offset().top) - trY; |
||||
|
$($('.part',td).get(j)).css('top',textareaY + 'px'); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
$('.translation textarea').blur(function() { |
||||
|
if($(this).val()) { |
||||
|
$('.alert', $(this).parents('tr')).remove(); |
||||
|
var RX = /%(?:\([^\s\)]*\))?[sdf]/g, |
||||
|
origs=$('.original', $(this).parents('tr')).html().match(RX), |
||||
|
trads=$(this).val().match(RX), |
||||
|
error = $('<span class="alert">Unmatched variables</span>'); |
||||
|
if (origs && trads) { |
||||
|
for (var i = trads.length; i--;){ |
||||
|
var key = trads[i]; |
||||
|
if (-1 == $.inArray(key, origs)) { |
||||
|
$(this).before(error) |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
return true; |
||||
|
} else { |
||||
|
if (!(origs === null && trads === null)) { |
||||
|
$(this).before(error); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
}); |
@ -0,0 +1,45 @@ |
|||||
|
{% extends "rosetta/base.html" %} |
||||
|
{% load i18n %} |
||||
|
{% block breadcumbs %}<a href="{% url rosetta-pick-file %}">{% trans "Home" %}</a> › {% trans "Language selection" %}{% endblock %} |
||||
|
{% block pagetitle %}{% trans "Language selection" %}{% endblock %} |
||||
|
{% block main %} |
||||
|
{% if has_pos %} |
||||
|
{% for lid,language,pos in languages %} |
||||
|
{% if pos %} |
||||
|
<div class="module"> |
||||
|
<h2>{{language}}</h2> |
||||
|
<table cellspacing="0"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th>{% trans "Application" %}</th> |
||||
|
<th class="r">{% trans "Progress"%}</th> |
||||
|
<th class="r">{% trans "Messages" %}</th> |
||||
|
<th class="r">{% trans "Translated" %}</th> |
||||
|
<th class="r">{% trans "Fuzzy"%}</th> |
||||
|
<th class="r">{% trans "Obsolete"%}</th> |
||||
|
<th>{% trans "File" %}</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
{% for app,path,po in pos %} |
||||
|
<tr class="{% cycle row1,row2 %}"> |
||||
|
<td><a href="{% url rosetta-language-selection lid,forloop.counter0 %}{% if do_django %}?django{% endif %}{% if do_rosetta %}?rosetta{% endif %}">{{ app|title }}</a></td> |
||||
|
<td class="r">{{po.percent_translated|floatformat:2}}%</td> |
||||
|
<td class="r">{{po|length}}</td> |
||||
|
<td class="r">{{po.translated_entries|length}}</td> |
||||
|
<td class="r">{{po.fuzzy_entries|length}}</td> |
||||
|
<td class="r">{{po.obsolete_entries|length}}</td> |
||||
|
<td class="hint">{{ path }}</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
{% else %} |
||||
|
<h1>{% trans "Nothing to translate!" %}</h1> |
||||
|
<p>{% trans "You haven't specified any languages in your settings file, or haven't yet generated a batch of translation catalogs." %}</p> |
||||
|
<p>{% blocktrans with "http://docs.djangoproject.com/en/dev/topics/i18n/#topics-i18n" as i18n_doc_link %}Please refer to <a href="{{i18n_doc_link}}">Django's I18N documentation</a> for a guide on how to set up internationalization for your project.{% endblocktrans %}</p> |
||||
|
{% endif %} |
||||
|
{% endblock %} |
@ -0,0 +1,125 @@ |
|||||
|
{% extends "rosetta/base.html" %} |
||||
|
{% load rosetta i18n %} |
||||
|
|
||||
|
{% block header %} |
||||
|
{{block.super}} |
||||
|
<div id="user-tools"> |
||||
|
<p> |
||||
|
<span><a href="{% url rosetta-pick-file %}">{% trans "Pick another file" %}</a> / |
||||
|
<a href="{% url rosetta-download-file %}">{% trans "Download this catalog" %}</a></span> |
||||
|
</p> |
||||
|
</div> |
||||
|
{% endblock %} |
||||
|
{% block breadcumbs %} |
||||
|
<a href="{% url rosetta-pick-file %}">{% trans "Home" %}</a> › |
||||
|
{{ rosetta_i18n_lang_name }} › |
||||
|
{{ rosetta_i18n_app|title }} › |
||||
|
{% blocktrans with rosetta_i18n_pofile.percent_translated|floatformat:2 as percent_translated %}Progress: {{ percent_translated }}%{% endblocktrans %} |
||||
|
{% if not rosetta_i18n_write %}<span class="alert">{% trans "File is read-only: download the file when done editing!" %}</span>{% endif %} |
||||
|
{% endblock %} |
||||
|
{% block pagetitle %}{% trans "English" %} - {{rosetta_i18n_lang_name}} ({{ rosetta_i18n_pofile.percent_translated|floatformat:0 }}%){% endblock %} |
||||
|
{% block main %} |
||||
|
<h1>{% blocktrans %}Translate into {{rosetta_i18n_lang_name}}{% endblocktrans %}</h1> |
||||
|
|
||||
|
<ul class="object-tools"> |
||||
|
<li class="nobubble">{% trans "Display:" %}</li> |
||||
|
<li {% ifequal rosetta_i18n_filter 'untranslated' %}class="active"{% endifequal %}><a href="?filter=untranslated">{% trans "Untranslated only" %}</a></li> |
||||
|
<li {% ifequal rosetta_i18n_filter 'translated' %}class="active"{% endifequal %}><a href="?filter=translated">{% trans "Translated only" %}</a></li> |
||||
|
<li {% ifequal rosetta_i18n_filter 'fuzzy' %}class="active"{% endifequal %}><a href="?filter=fuzzy">{% trans "Fuzzy only" %}</a></li> |
||||
|
<li {% ifequal rosetta_i18n_filter 'all' %}class="active"{% endifequal %}><a href="?filter=all">{% trans "All" %}</a></li> |
||||
|
</ul> |
||||
|
<div id="changelist" class="module{% if rosetta_i18n_lang_bidi %} rtl{% endif %}"> |
||||
|
<div id="toolbar"> |
||||
|
<form id="changelist-search" action="" method="post"> |
||||
|
<div><!-- DIV needed for valid HTML --> |
||||
|
{% rosetta_csrf_token %} |
||||
|
<label for="searchbar"><img src="{{ADMIN_MEDIA_PREFIX}}img/admin/icon_searchbox.png" alt="{% trans "Search" %}" /></label> |
||||
|
<input type="text" size="40" name="query" value="{% if query %}{{query}}{% endif %}" id="searchbar" /> |
||||
|
<input type="submit" name="search" value="{% trans "Go" %}" /> |
||||
|
</div> |
||||
|
</form> |
||||
|
</div> |
||||
|
|
||||
|
<form method="post" action=""> |
||||
|
<table> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
{% rosetta_csrf_token %} |
||||
|
<th>{% trans "Original" %}</th> |
||||
|
{% if main_language %}<th>{{ main_language }}</th>{% endif %} |
||||
|
<th>{{ rosetta_i18n_lang_name }}</th> |
||||
|
<th class="c">{% trans "Fuzzy" %}</th> |
||||
|
<th>{% trans "Occurrences(s)" %}</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
{% for message in messages %} |
||||
|
<tr class="{% cycle row1,row2 %}"> |
||||
|
{% if message.msgid_plural %} |
||||
|
<td class="original plural"> |
||||
|
<div class="plural-container"> |
||||
|
<span class="part">{{message.msgid|format_message|linebreaksbr}}</span> |
||||
|
<span class="part">{{message.msgid_plural|format_message|linebreaksbr}}</span> |
||||
|
</div> |
||||
|
</td> |
||||
|
<td class="translation"> |
||||
|
{% for k, msgstr in message.msgstr_plural.items|dictsort:"0" %} |
||||
|
<label for="m_{{message.id}}_{{k}}">{{k}}:</label> |
||||
|
<textarea rows="{{message.msgid|format_message|lines_count}}" cols="40" id="m_{{message.id}}_{{k}}" name="m_{{message.id}}_{{k}}">{{msgstr}}</textarea> |
||||
|
{% endfor %} |
||||
|
</td> |
||||
|
{% else %} |
||||
|
<td class="original">{{ message.msgid|format_message|linebreaksbr }}</td> |
||||
|
{% if main_language %}<td class="original">{{ message.main_lang|format_message|linebreaksbr }}</td>{% endif %} |
||||
|
<td class="translation"> |
||||
|
<textarea rows="{{message.msgid|format_message|lines_count}}" cols="40" name="m_{{message.id}}">{{message.msgstr}}</textarea> |
||||
|
{% if ENABLE_TRANSLATION_SUGGESTIONS %}<a href="#" class="suggest">{% trans "suggest" %}</a>{% endif %} |
||||
|
</td> |
||||
|
{% endif %} |
||||
|
<td class="c"> |
||||
|
<input type="checkbox" name="f_{{message.id}}" value="1" {% if message|is_fuzzy %}checked="checked"{% endif %} /> |
||||
|
</td> |
||||
|
<td class="location"> |
||||
|
{% for fn,lineno in message.occurrences %} |
||||
|
<code{% if forloop.counter|gt:"3" %} class="hide"{% endif %}>{{ fn }}:{{lineno}}</code> |
||||
|
{% endfor %} |
||||
|
{% if message.occurrences|length|gt:"3" %} |
||||
|
<a href="#">… ({% blocktrans count message.occurrences|length|minus:"3" as more_count %}{{more_count}} more{% plural %}{{more_count}} more{% endblocktrans %})</a> |
||||
|
{% endif %} |
||||
|
</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</tbody> |
||||
|
</table> |
||||
|
<div class="submit-row"> |
||||
|
<p class="paginator"> |
||||
|
{% if query %} |
||||
|
<input type="hidden" name="query" value="{{query}}" /> |
||||
|
{% endif %} |
||||
|
<input type="submit" class="default" name="_next" value="{% trans "Save and translate next block" %}"/> |
||||
|
|
||||
|
|
||||
|
{% if needs_pagination %} |
||||
|
{% trans "Skip to page:" %} |
||||
|
{% for i in page_range %} |
||||
|
{% ifequal i '...' %} |
||||
|
<span class="space">{{ i }}</span> |
||||
|
{% else %} |
||||
|
{% ifequal i page %} |
||||
|
<span class="this-page">{{i}}</span> |
||||
|
{% else %} |
||||
|
<a href="?page={{i}}{% if query %}&query={{query}}{% endif %}">{{i}}</a> |
||||
|
{% endifequal %} |
||||
|
{% endifequal %} |
||||
|
{% endfor %} |
||||
|
{% else %} |
||||
|
{% trans "Displaying:" %} |
||||
|
{% endif %} |
||||
|
<strong>{% blocktrans count rosetta_i18n_pofile|length as message_number and paginator.object_list|length as hits %}{{hits}}/{{message_number}} message{% plural %}{{hits}}/{{message_number}} messages{% endblocktrans %}</strong> |
||||
|
|
||||
|
|
||||
|
</p> |
||||
|
</div> |
||||
|
</form> |
||||
|
</div> |
||||
|
{% endblock %} |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
@ -0,0 +1,77 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
||||
|
from django import template |
||||
|
from django.utils.safestring import mark_safe |
||||
|
from django.utils.html import escape |
||||
|
import re |
||||
|
from django.template import Node |
||||
|
|
||||
|
register = template.Library() |
||||
|
rx = re.compile(r'(%(\([^\s\)]*\))?[sd])') |
||||
|
|
||||
|
def format_message(message): |
||||
|
return mark_safe(rx.sub('<code>\\1</code>', escape(message).replace(r'\n','<br />\n'))) |
||||
|
format_message=register.filter(format_message) |
||||
|
|
||||
|
|
||||
|
def lines_count(message): |
||||
|
return 1 + sum([len(line)/50 for line in message.split('\n')]) |
||||
|
lines_count=register.filter(lines_count) |
||||
|
|
||||
|
def mult(a,b): |
||||
|
return int(a)*int(b) |
||||
|
mult=register.filter(mult) |
||||
|
|
||||
|
def minus(a,b): |
||||
|
try: |
||||
|
return int(a) - int(b) |
||||
|
except: |
||||
|
return 0 |
||||
|
minus=register.filter(minus) |
||||
|
|
||||
|
|
||||
|
def gt(a,b): |
||||
|
try: |
||||
|
return int(a) > int(b) |
||||
|
except: |
||||
|
return False |
||||
|
gt=register.filter(gt) |
||||
|
|
||||
|
|
||||
|
def is_fuzzy(message): |
||||
|
return message and hasattr(message, 'flags') and 'fuzzy' in message.flags |
||||
|
is_fuzzy = register.filter(is_fuzzy) |
||||
|
|
||||
|
class RosettaCsrfTokenPlaceholder(Node): |
||||
|
def render(self, context): |
||||
|
return mark_safe(u"<!-- csrf token placeholder -->") |
||||
|
|
||||
|
def rosetta_csrf_token(parser, token): |
||||
|
try: |
||||
|
from django.template.defaulttags import csrf_token |
||||
|
return csrf_token(parser,token) |
||||
|
except ImportError: |
||||
|
return RosettaCsrfTokenPlaceholder() |
||||
|
rosetta_csrf_token=register.tag(rosetta_csrf_token) |
@ -0,0 +1,32 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
||||
|
from django.conf.urls.defaults import * |
||||
|
from django.views.generic.simple import direct_to_template |
||||
|
urlpatterns = patterns('rosetta.views', |
||||
|
url(r'^$', 'home', name='rosetta-home'), |
||||
|
url(r'^pick/$', 'list_languages', name='rosetta-pick-file'), |
||||
|
url(r'^download/$', 'download_file', name='rosetta-download-file'), |
||||
|
url(r'^select/(?P<langid>[\w\-]+)/(?P<idx>\d+)/$','lang_sel', name='rosetta-language-selection'), |
||||
|
) |
@ -0,0 +1,322 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
""" |
||||
|
* Copyright (C) 2010, mbonetti <http://code.google.com/u/mbonetti/> |
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
* of this software and associated documentation files (the "Software"), to deal |
||||
|
* in the Software without restriction, including without limitation the rights |
||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the Software is |
||||
|
* furnished to do so, subject to the following conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be included in |
||||
|
* all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
* THE SOFTWARE. |
||||
|
""" |
||||
|
|
||||
|
from django.conf import settings |
||||
|
from django.contrib.auth.decorators import user_passes_test |
||||
|
from django.core.paginator import Paginator, InvalidPage |
||||
|
from django.core.urlresolvers import reverse, resolve, Resolver404 |
||||
|
from django.http import Http404, HttpResponseRedirect, HttpResponse |
||||
|
from django.shortcuts import render_to_response |
||||
|
from django.utils.encoding import smart_unicode, force_unicode, iri_to_uri |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
from django.views.decorators.cache import never_cache |
||||
|
from rosetta.polib import pofile |
||||
|
from rosetta.poutil import find_pos, pagination_range |
||||
|
from rosetta.conf import settings as rosetta_settings |
||||
|
import re, os, rosetta, datetime, unicodedata |
||||
|
from django.template import RequestContext |
||||
|
|
||||
|
|
||||
|
try: |
||||
|
resolve(settings.LOGIN_URL) |
||||
|
except Resolver404: |
||||
|
try: |
||||
|
resolve('/admin/') |
||||
|
except Resolver404: |
||||
|
raise Exception('Rosetta cannot log you in!\nYou must define a LOGIN_URL in your settings if you don\'t run the Django admin site at a standard URL.') |
||||
|
else: |
||||
|
LOGIN_URL = '/admin/' |
||||
|
else: |
||||
|
LOGIN_URL = settings.LOGIN_URL |
||||
|
|
||||
|
|
||||
|
def home(request): |
||||
|
""" |
||||
|
Displays a list of messages to be translated |
||||
|
""" |
||||
|
|
||||
|
def fix_nls(in_,out_): |
||||
|
"""Fixes submitted translations by filtering carriage returns and pairing |
||||
|
newlines at the begging and end of the translated string with the original |
||||
|
""" |
||||
|
if 0 == len(in_) or 0 == len(out_): |
||||
|
return out_ |
||||
|
|
||||
|
if "\r" in out_ and "\r" not in in_: |
||||
|
out_=out_.replace("\r",'') |
||||
|
|
||||
|
if "\n" == in_[0] and "\n" != out_[0]: |
||||
|
out_ = "\n" + out_ |
||||
|
elif "\n" != in_[0] and "\n" == out_[0]: |
||||
|
out_ = out_.lstrip() |
||||
|
if "\n" == in_[-1] and "\n" != out_[-1]: |
||||
|
out_ = out_ + "\n" |
||||
|
elif "\n" != in_[-1] and "\n" == out_[-1]: |
||||
|
out_ = out_.rstrip() |
||||
|
return out_ |
||||
|
|
||||
|
version = rosetta.get_version(True) |
||||
|
if 'rosetta_i18n_fn' in request.session: |
||||
|
rosetta_i18n_fn=request.session.get('rosetta_i18n_fn') |
||||
|
rosetta_i18n_app = get_app_name(rosetta_i18n_fn) |
||||
|
rosetta_i18n_pofile = request.session.get('rosetta_i18n_pofile') |
||||
|
rosetta_i18n_lang_code = request.session['rosetta_i18n_lang_code'] |
||||
|
rosetta_i18n_lang_bidi = (rosetta_i18n_lang_code in settings.LANGUAGES_BIDI) |
||||
|
rosetta_i18n_write = request.session.get('rosetta_i18n_write', True) |
||||
|
|
||||
|
if 'filter' in request.GET: |
||||
|
if request.GET.get('filter') in ('untranslated', 'translated', 'fuzzy', 'all'): |
||||
|
filter_ = request.GET.get('filter') |
||||
|
request.session['rosetta_i18n_filter'] = filter_ |
||||
|
return HttpResponseRedirect(reverse('rosetta-home')) |
||||
|
|
||||
|
rosetta_i18n_filter = request.session.get('rosetta_i18n_filter', 'all') |
||||
|
|
||||
|
if '_next' in request.POST: |
||||
|
rx=re.compile(r'^m_([0-9]+)') |
||||
|
rx_plural=re.compile(r'^m_([0-9]+)_([0-9]+)') |
||||
|
file_change = False |
||||
|
for k in request.POST.keys(): |
||||
|
if rx_plural.match(k): |
||||
|
id=int(rx_plural.match(k).groups()[0]) |
||||
|
idx=int(rx_plural.match(k).groups()[1]) |
||||
|
rosetta_i18n_pofile[id].msgstr_plural[str(idx)] = fix_nls(rosetta_i18n_pofile[id].msgid_plural[idx], request.POST.get(k)) |
||||
|
file_change = True |
||||
|
elif rx.match(k): |
||||
|
id=int(rx.match(k).groups()[0]) |
||||
|
rosetta_i18n_pofile[id].msgstr = fix_nls(rosetta_i18n_pofile[id].msgid, request.POST.get(k)) |
||||
|
file_change = True |
||||
|
|
||||
|
if file_change and 'fuzzy' in rosetta_i18n_pofile[id].flags and not request.POST.get('f_%d' %id, False): |
||||
|
rosetta_i18n_pofile[id].flags.remove('fuzzy') |
||||
|
elif file_change and 'fuzzy' not in rosetta_i18n_pofile[id].flags and request.POST.get('f_%d' %id, False): |
||||
|
rosetta_i18n_pofile[id].flags.append('fuzzy') |
||||
|
|
||||
|
if file_change and rosetta_i18n_write: |
||||
|
|
||||
|
try: |
||||
|
rosetta_i18n_pofile.metadata['Last-Translator'] = unicodedata.normalize('NFKD', u"%s %s <%s>" %(request.user.first_name,request.user.last_name,request.user.email)).encode('ascii', 'ignore') |
||||
|
rosetta_i18n_pofile.metadata['X-Translated-Using'] = u"django-rosetta %s" % rosetta.get_version(False) |
||||
|
rosetta_i18n_pofile.metadata['PO-Revision-Date'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M%z') |
||||
|
except UnicodeDecodeError: |
||||
|
pass |
||||
|
try: |
||||
|
rosetta_i18n_pofile.save() |
||||
|
rosetta_i18n_pofile.save_as_mofile(rosetta_i18n_fn.replace('.po','.mo')) |
||||
|
|
||||
|
# Try auto-reloading via the WSGI daemon mode reload mechanism |
||||
|
if rosetta_settings.WSGI_AUTO_RELOAD and \ |
||||
|
request.environ.has_key('mod_wsgi.process_group') and \ |
||||
|
request.environ.get('mod_wsgi.process_group',None) and \ |
||||
|
request.environ.has_key('SCRIPT_FILENAME') and \ |
||||
|
int(request.environ.get('mod_wsgi.script_reloading', '0')): |
||||
|
try: |
||||
|
os.utime(request.environ.get('SCRIPT_FILENAME'), None) |
||||
|
except OSError: |
||||
|
pass |
||||
|
|
||||
|
except: |
||||
|
request.session['rosetta_i18n_write'] = False |
||||
|
|
||||
|
request.session['rosetta_i18n_pofile']=rosetta_i18n_pofile |
||||
|
|
||||
|
# Retain query arguments |
||||
|
query_arg = '' |
||||
|
if 'query' in request.REQUEST: |
||||
|
query_arg = '?query=%s' %request.REQUEST.get('query') |
||||
|
if 'page' in request.GET: |
||||
|
if query_arg: |
||||
|
query_arg = query_arg + '&' |
||||
|
else: |
||||
|
query_arg = '?' |
||||
|
query_arg = query_arg + 'page=%d' % int(request.GET.get('page')) |
||||
|
|
||||
|
|
||||
|
return HttpResponseRedirect(reverse('rosetta-home') + iri_to_uri(query_arg)) |
||||
|
|
||||
|
|
||||
|
rosetta_i18n_lang_name = _(request.session.get('rosetta_i18n_lang_name')) |
||||
|
rosetta_i18n_lang_code = request.session.get('rosetta_i18n_lang_code') |
||||
|
|
||||
|
if 'query' in request.REQUEST and request.REQUEST.get('query','').strip(): |
||||
|
query=request.REQUEST.get('query').strip() |
||||
|
rx=re.compile(query, re.IGNORECASE) |
||||
|
paginator = Paginator([e for e in rosetta_i18n_pofile if rx.search(smart_unicode(e.msgstr)+smart_unicode(e.msgid)+u''.join([o[0] for o in e.occurrences]))], rosetta_settings.MESSAGES_PER_PAGE) |
||||
|
else: |
||||
|
if rosetta_i18n_filter == 'untranslated': |
||||
|
paginator = Paginator(rosetta_i18n_pofile.untranslated_entries(), rosetta_settings.MESSAGES_PER_PAGE) |
||||
|
elif rosetta_i18n_filter == 'translated': |
||||
|
paginator = Paginator(rosetta_i18n_pofile.translated_entries(), rosetta_settings.MESSAGES_PER_PAGE) |
||||
|
elif rosetta_i18n_filter == 'fuzzy': |
||||
|
paginator = Paginator(rosetta_i18n_pofile.fuzzy_entries(), rosetta_settings.MESSAGES_PER_PAGE) |
||||
|
else: |
||||
|
paginator = Paginator([e for e in rosetta_i18n_pofile if not e.obsolete], rosetta_settings.MESSAGES_PER_PAGE) |
||||
|
|
||||
|
if 'page' in request.GET and int(request.GET.get('page')) <= paginator.num_pages and int(request.GET.get('page')) > 0: |
||||
|
page = int(request.GET.get('page')) |
||||
|
else: |
||||
|
page = 1 |
||||
|
messages = paginator.page(page).object_list |
||||
|
if rosetta_settings.MAIN_LANGUAGE and rosetta_settings.MAIN_LANGUAGE != rosetta_i18n_lang_code: |
||||
|
|
||||
|
main_language = None |
||||
|
for language in settings.LANGUAGES: |
||||
|
if language[0] == rosetta_settings.MAIN_LANGUAGE: |
||||
|
main_language = _(language[1]) |
||||
|
break |
||||
|
|
||||
|
fl = ("/%s/" % rosetta_settings.MAIN_LANGUAGE).join(rosetta_i18n_fn.split("/%s/" % rosetta_i18n_lang_code)) |
||||
|
po = pofile(fl) |
||||
|
|
||||
|
main_messages = [] |
||||
|
for message in messages: |
||||
|
message.main_lang = po.find(message.msgid).msgstr |
||||
|
|
||||
|
needs_pagination = paginator.num_pages > 1 |
||||
|
if needs_pagination: |
||||
|
if paginator.num_pages >= 10: |
||||
|
page_range = pagination_range(1, paginator.num_pages, page) |
||||
|
else: |
||||
|
page_range = range(1,1+paginator.num_pages) |
||||
|
ADMIN_MEDIA_PREFIX = settings.ADMIN_MEDIA_PREFIX |
||||
|
ENABLE_TRANSLATION_SUGGESTIONS = rosetta_settings.ENABLE_TRANSLATION_SUGGESTIONS |
||||
|
|
||||
|
return render_to_response('rosetta/pofile.html', locals(), context_instance=RequestContext(request)) |
||||
|
|
||||
|
|
||||
|
else: |
||||
|
return list_languages(request) |
||||
|
home=user_passes_test(lambda user:can_translate(user),LOGIN_URL)(home) |
||||
|
home=never_cache(home) |
||||
|
|
||||
|
|
||||
|
def download_file(request): |
||||
|
import zipfile, os |
||||
|
from StringIO import StringIO |
||||
|
# original filename |
||||
|
rosetta_i18n_fn=request.session.get('rosetta_i18n_fn', None) |
||||
|
# in-session modified catalog |
||||
|
rosetta_i18n_pofile = request.session.get('rosetta_i18n_pofile', None) |
||||
|
# language code |
||||
|
rosetta_i18n_lang_code = request.session.get('rosetta_i18n_lang_code', None) |
||||
|
|
||||
|
if not rosetta_i18n_lang_code or not rosetta_i18n_pofile or not rosetta_i18n_fn: |
||||
|
return HttpResponseRedirect(reverse('rosetta-home')) |
||||
|
try: |
||||
|
if len(rosetta_i18n_fn.split('/')) >= 5: |
||||
|
offered_fn = '_'.join(rosetta_i18n_fn.split('/')[-5:]) |
||||
|
else: |
||||
|
offered_fn = rosetta_i18n_fn.split('/')[-1] |
||||
|
po_fn = str(rosetta_i18n_fn.split('/')[-1]) |
||||
|
mo_fn = str(po_fn.replace('.po','.mo')) # not so smart, huh |
||||
|
zipdata = StringIO() |
||||
|
zipf = zipfile.ZipFile(zipdata, mode="w") |
||||
|
zipf.writestr(po_fn, str(rosetta_i18n_pofile)) |
||||
|
zipf.writestr(mo_fn, rosetta_i18n_pofile.to_binary()) |
||||
|
zipf.close() |
||||
|
zipdata.seek(0) |
||||
|
|
||||
|
response = HttpResponse(zipdata.read()) |
||||
|
response['Content-Disposition'] = 'attachment; filename=%s.%s.zip' %(offered_fn,rosetta_i18n_lang_code) |
||||
|
response['Content-Type'] = 'application/x-zip' |
||||
|
return response |
||||
|
except Exception, e: |
||||
|
return HttpResponseRedirect(reverse('rosetta-home')) |
||||
|
|
||||
|
download_file=user_passes_test(lambda user:can_translate(user),LOGIN_URL)(download_file) |
||||
|
download_file=never_cache(download_file) |
||||
|
|
||||
|
|
||||
|
|
||||
|
def list_languages(request): |
||||
|
""" |
||||
|
Lists the languages for the current project, the gettext catalog files |
||||
|
that can be translated and their translation progress |
||||
|
""" |
||||
|
languages = [] |
||||
|
do_django = 'django' in request.GET |
||||
|
do_rosetta = 'rosetta' in request.GET |
||||
|
has_pos = False |
||||
|
for language in settings.LANGUAGES: |
||||
|
pos = find_pos(language[0],include_djangos=do_django,include_rosetta=do_rosetta) |
||||
|
has_pos = has_pos or len(pos) |
||||
|
languages.append( |
||||
|
(language[0], |
||||
|
_(language[1]), |
||||
|
[(get_app_name(l), os.path.realpath(l), pofile(l)) for l in pos], |
||||
|
) |
||||
|
) |
||||
|
ADMIN_MEDIA_PREFIX = settings.ADMIN_MEDIA_PREFIX |
||||
|
version = rosetta.get_version(True) |
||||
|
return render_to_response('rosetta/languages.html', locals(), context_instance=RequestContext(request)) |
||||
|
list_languages=user_passes_test(lambda user:can_translate(user),LOGIN_URL)(list_languages) |
||||
|
list_languages=never_cache(list_languages) |
||||
|
|
||||
|
def get_app_name(path): |
||||
|
app = path.split("/locale")[0].split("/")[-1] |
||||
|
return app |
||||
|
|
||||
|
def lang_sel(request,langid,idx): |
||||
|
""" |
||||
|
Selects a file to be translated |
||||
|
""" |
||||
|
if langid not in [l[0] for l in settings.LANGUAGES]: |
||||
|
raise Http404 |
||||
|
else: |
||||
|
|
||||
|
do_django = 'django' in request.GET |
||||
|
do_rosetta = 'rosetta' in request.GET |
||||
|
|
||||
|
file_ = find_pos(langid,include_djangos=do_django,include_rosetta=do_rosetta)[int(idx)] |
||||
|
|
||||
|
request.session['rosetta_i18n_lang_code'] = langid |
||||
|
request.session['rosetta_i18n_lang_name'] = unicode([l[1] for l in settings.LANGUAGES if l[0] == langid][0]) |
||||
|
request.session['rosetta_i18n_fn'] = file_ |
||||
|
po = pofile(file_) |
||||
|
for i in range(len(po)): |
||||
|
po[i].id = i |
||||
|
|
||||
|
request.session['rosetta_i18n_pofile'] = po |
||||
|
try: |
||||
|
os.utime(file_,None) |
||||
|
request.session['rosetta_i18n_write'] = True |
||||
|
except OSError: |
||||
|
request.session['rosetta_i18n_write'] = False |
||||
|
|
||||
|
return HttpResponseRedirect(reverse('rosetta-home')) |
||||
|
lang_sel=user_passes_test(lambda user:can_translate(user),LOGIN_URL)(lang_sel) |
||||
|
lang_sel=never_cache(lang_sel) |
||||
|
|
||||
|
def can_translate(user): |
||||
|
if not user.is_authenticated(): |
||||
|
return False |
||||
|
elif user.is_superuser: |
||||
|
return True |
||||
|
else: |
||||
|
try: |
||||
|
from django.contrib.auth.models import Group |
||||
|
translators = Group.objects.get(name='translators') |
||||
|
return translators in user.groups.all() |
||||
|
except Group.DoesNotExist: |
||||
|
return False |
Write
Preview
Loading…
Cancel
Save
Reference in new issue