Commit d0e8ef95 authored by Luca De Petrillo's avatar Luca De Petrillo

Merge remote-tracking branch 'upstream/master'

Conflicts:
	weblate/html/subproject_info.html
parents 01dfeb91 8a196632
......@@ -19,13 +19,79 @@
#
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext_lazy as _, get_language
from accounts.models import Profile
from lang.models import Language
from trans.models import Project
from django.contrib.auth.models import User
from registration.forms import RegistrationFormUniqueEmail
from django.utils.encoding import force_unicode
from itertools import chain
try:
from icu import Locale, Collator
HAS_ICU = True
except ImportError:
HAS_ICU = False
def sort_choices(choices):
'''
Sorts choices alphabetically.
Either using cmp or ICU.
'''
if not HAS_ICU:
sorter = cmp
else:
sorter = Collator.createInstance(Locale(get_language())).compare
# Actually sort values
return sorted(
choices,
key=lambda tup: tup[1],
cmp=sorter
)
class SortedSelectMixin(object):
'''
Mixin for Select widgets to sort choices alphabetically.
'''
def render_options(self, choices, selected_choices):
'''
Renders sorted options.
'''
# Normalize to strings.
selected_choices = set(force_unicode(v) for v in selected_choices)
output = []
# Actually sort values
all_choices = sort_choices(list(chain(self.choices, choices)))
# Stolen from Select.render_options
for option_value, option_label in all_choices:
output.append(
self.render_option(
selected_choices, option_value, option_label
)
)
return u'\n'.join(output)
class SortedSelectMultiple(SortedSelectMixin, forms.SelectMultiple):
'''
Wrapper class to sort choices alphabetically.
'''
pass
class SortedSelect(SortedSelectMixin, forms.Select):
'''
Wrapper class to sort choices alphabetically.
'''
pass
class ProfileForm(forms.ModelForm):
......@@ -39,6 +105,11 @@ class ProfileForm(forms.ModelForm):
'languages',
'secondary_languages',
)
widgets = {
'language': SortedSelect,
'languages': SortedSelectMultiple,
'secondary_languages': SortedSelectMultiple,
}
def __init__(self, *args, **kwargs):
super(ProfileForm, self).__init__(*args, **kwargs)
......@@ -128,6 +199,20 @@ class RegistrationForm(RegistrationFormUniqueEmail):
Registration form, please note it does not save first/last name
this is done by signal handler in accounts.models.
'''
required_css_class = "required"
error_css_class = "error"
username = forms.RegexField(
regex=r'^[\w.@+-]+$',
max_length=30,
label=_("Username"),
error_messages={
'invalid': _(
'This value may contain only letters, '
'numbers and following characters: @ . + - _'
)
}
)
first_name = forms.CharField(label=_('First name'))
last_name = forms.CharField(label=_('Last name'))
content = forms.CharField(required=False)
......
......@@ -42,6 +42,114 @@ from trans.util import get_user_display, get_site_url
import weblate
def notify_merge_failure(subproject, error, status):
'''
Notification on merge failure.
'''
subscriptions = Profile.objects.subscribed_merge_failure(
subproject.project,
)
for subscription in subscriptions:
subscription.notify_merge_failure(subproject, error, status)
# Notify admins
send_notification_email(
'en',
'ADMINS',
'merge_failure',
subproject,
{
'subproject': subproject,
'status': status,
'error': error,
}
)
def notify_new_string(translation):
'''
Notification on new string to translate.
'''
subscriptions = Profile.objects.subscribed_new_string(
translation.subproject.project, translation.language
)
for subscription in subscriptions:
subscription.notify_new_string(translation)
def notify_new_translation(unit, oldunit, user):
'''
Notify subscribed users about new translation
'''
subscriptions = Profile.objects.subscribed_any_translation(
unit.translation.subproject.project,
unit.translation.language,
user
)
for subscription in subscriptions:
subscription.notify_any_translation(unit, oldunit)
def notify_new_contributor(unit, user):
'''
Notify about new contributor.
'''
subscriptions = Profile.objects.subscribed_new_contributor(
unit.translation.subproject.project,
unit.translation.language,
user
)
for subscription in subscriptions:
subscription.notify_new_contributor(
unit.translation, user
)
def notify_new_suggestion(unit, suggestion, user):
'''
Notify about new suggestion.
'''
subscriptions = Profile.objects.subscribed_new_suggestion(
unit.translation.subproject.project,
unit.translation.language,
user
)
for subscription in subscriptions:
subscription.notify_new_suggestion(
unit.translation,
suggestion,
unit
)
def notify_new_comment(unit, comment, user, report_source_bugs):
'''
Notify about new comment.
'''
subscriptions = Profile.objects.subscribed_new_comment(
unit.translation.subproject.project,
comment.language,
user
)
for subscription in subscriptions:
subscription.notify_new_comment(unit, comment)
# Notify upstream
if comment.language is None and report_source_bugs != '':
send_notification_email(
'en',
report_source_bugs,
'new_comment',
unit.translation,
{
'unit': unit,
'comment': comment,
'subproject': unit.translation.subproject,
},
from_email=user.email,
)
def send_notification_email(language, email, notification, translation_obj,
context=None, headers=None, from_email=None):
'''
......@@ -145,7 +253,7 @@ class ProfileManager(models.Manager):
languages=language
)
# We don't want to filter out anonymous user
if user.is_authenticated():
if user is not None and user.is_authenticated():
ret = ret.exclude(user=user)
return ret
......
......@@ -28,21 +28,35 @@ from django.contrib.auth.models import User, Group
from django.core import mail
from django.conf import settings
from django.core.management import call_command
from accounts.models import Profile
from accounts.models import (
Profile,
notify_merge_failure,
notify_new_string,
notify_new_suggestion,
notify_new_comment,
notify_new_translation,
notify_new_contributor,
)
from trans.tests.views import ViewTestCase
from trans.models.unitdata import Suggestion, Comment
from lang.models import Language
REGISTRATION_DATA = {
'username': 'username',
'email': 'noreply@weblate.org',
'password1': 'password',
'password2': 'password',
'first_name': 'First',
'last_name': 'Last',
}
class RegistrationTest(TestCase):
def test_register(self):
response = self.client.post(
reverse('weblate_register'),
{
'username': 'username',
'email': 'noreply@weblate.org',
'password1': 'password',
'password2': 'password',
'first_name': 'First',
'last_name': 'Last',
}
REGISTRATION_DATA
)
# Check we did succeed
self.assertRedirects(response, reverse('registration_complete'))
......@@ -74,6 +88,47 @@ class RegistrationTest(TestCase):
self.assertEqual(user.first_name, 'First')
self.assertEqual(user.last_name, 'Last')
def test_wrong_username(self):
data = REGISTRATION_DATA.copy()
data['username'] = 'u'
response = self.client.post(
reverse('weblate_register'),
data
)
self.assertContains(
response,
'Username needs to have at least five characters.'
)
def test_wrong_mail(self):
data = REGISTRATION_DATA.copy()
data['email'] = 'x'
response = self.client.post(
reverse('weblate_register'),
data
)
self.assertContains(
response,
'Enter'
)
# Error message has changed in Django 1.5
self.assertTrue(
'Enter a valid e-mail address.' in response.content
or 'Enter a valid email address.' in response.content
)
def test_spam(self):
data = REGISTRATION_DATA.copy()
data['content'] = 'x'
response = self.client.post(
reverse('weblate_register'),
data
)
self.assertContains(
response,
'Invalid value'
)
class CommandTest(TestCase):
'''
......@@ -129,6 +184,32 @@ class ViewTest(TestCase):
'[Weblate] Message from dark side'
)
def test_contact_subject(self):
# With set subject
response = self.client.get(
reverse('contact'),
{'subject': 'Weblate test message'}
)
self.assertContains(response, 'Weblate test message')
def test_contact_user(self):
user = User.objects.create_user(
username='testuser',
password='testpassword',
)
user.first_name = 'First'
user.last_name = 'Second'
user.email = 'noreply@weblate.org'
user.save()
Profile.objects.get_or_create(user=user)
# Login
self.client.login(username='testuser', password='testpassword')
response = self.client.get(
reverse('contact'),
)
self.assertContains(response, 'value="First Second"')
self.assertContains(response, 'noreply@weblate.org')
def test_user(self):
'''
Test user pages.
......@@ -149,6 +230,170 @@ class ViewTest(TestCase):
)
self.assertContains(response, 'src="/activity')
class ProfileTest(ViewTestCase):
def test_profile(self):
# Get profile page
response = self.client.get(reverse('profile'))
self.assertContains(response, 'class="tabs preferences"')
# Save profile
response = self.client.post(
reverse('profile'),
{
'language': 'cs',
'languages': Language.objects.get(code='cs').id,
'secondary_languages': Language.objects.get(code='cs').id,
'first_name': 'First',
'last_name': 'Last',
'email': 'noreply@weblate.org',
}
)
self.assertRedirects(response, reverse('profile'))
class NotificationTest(ViewTestCase):
def setUp(self):
super(NotificationTest, self).setUp()
self.user.email = 'noreply@weblate.org'
self.user.save()
profile = Profile.objects.get(user=self.user)
profile.subscribe_any_translation = True
profile.subscribe_new_string = True
profile.subscribe_new_suggestion = True
profile.subscribe_new_contributor = True
profile.subscribe_new_comment = True
profile.subscribe_merge_failure = True
profile.subscriptions.add(self.project)
profile.languages.add(
Language.objects.get(code='cs')
)
profile.save()
def second_user(self):
return User.objects.create_user(
username='seconduser',
password='secondpassword'
)
def test_notify_merge_failure(self):
notify_merge_failure(
self.subproject,
'Failed merge',
'Error\nstatus'
)
# Check mail
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(
mail.outbox[0].subject,
'[Weblate] Merge failure in Test/Test'
)
def test_notify_new_string(self):
notify_new_string(self.get_translation())
# Check mail
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(
mail.outbox[0].subject,
'[Weblate] New string to translate in Test/Test - Czech'
)
def test_notify_new_translation(self):
unit = self.get_unit()
unit2 = self.get_translation().unit_set.get(
source='Thank you for using Weblate.'
)
notify_new_translation(
unit,
unit2,
self.second_user()
)
# Check mail
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(
mail.outbox[0].subject,
'[Weblate] New translation in Test/Test - Czech'
)
def test_notify_new_contributor(self):
unit = self.get_unit()
notify_new_contributor(
unit,
self.second_user()
)
# Check mail
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(
mail.outbox[0].subject,
'[Weblate] New contributor in Test/Test - Czech'
)
def test_notify_new_suggestion(self):
unit = self.get_unit()
notify_new_suggestion(
unit,
Suggestion.objects.create(
checksum=unit.checksum,
project=unit.translation.subproject.project,
language=unit.translation.language,
target='Foo'
),
self.second_user()
)
# Check mail
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(
mail.outbox[0].subject,
'[Weblate] New suggestion in Test/Test - Czech'
)
def test_notify_new_comment(self):
unit = self.get_unit()
notify_new_comment(
unit,
Comment.objects.create(
checksum=unit.checksum,
project=unit.translation.subproject.project,
language=unit.translation.language,
comment='Foo'
),
self.second_user(),
''
)
# Check mail
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(
mail.outbox[0].subject,
'[Weblate] New comment in Test/Test'
)
def test_notify_new_comment_report(self):
unit = self.get_unit()
notify_new_comment(
unit,
Comment.objects.create(
checksum=unit.checksum,
project=unit.translation.subproject.project,
language=None,
comment='Foo'
),
self.second_user(),
'noreply@weblate.org'
)
# Check mail
self.assertEqual(len(mail.outbox), 2)
self.assertEqual(
mail.outbox[0].subject,
'[Weblate] New comment in Test/Test'
)
self.assertEqual(
mail.outbox[1].subject,
'[Weblate] New comment in Test/Test'
)
......@@ -21,12 +21,12 @@
from django.conf.urls import patterns, url
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import views as auth_views
from django.views.generic import TemplateView
from django.conf import settings
from registration.views import activate, register
from accounts.forms import RegistrationForm
from accounts.views import RegistrationTemplateView
urlpatterns = patterns(
......@@ -41,21 +41,21 @@ urlpatterns = patterns(
),
url(
r'^register/complete/$',
TemplateView.as_view(
RegistrationTemplateView.as_view(
template_name='registration/registration_complete.html'
),
name='registration_complete'
),
url(
r'^register/closed/$',
TemplateView.as_view(
RegistrationTemplateView.as_view(
template_name='registration/registration_closed.html'
),
name='registration_disallowed'
),
url(
r'^activate/complete/$',
TemplateView.as_view(
RegistrationTemplateView.as_view(
template_name='registration/activation_complete.html',
),
name='registration_activation_complete'
......
......@@ -30,6 +30,7 @@ from django.utils import translation
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.views.generic import TemplateView
from urllib import urlencode
from accounts.models import set_lang
from trans.models import Change, Project
......@@ -192,9 +193,9 @@ def user_page(request, user):
last_changes = all_changes[:10]
# Filter where project is active
user_projects_ids = list(all_changes.values_list(
user_projects_ids = set(all_changes.values_list(
'translation__subproject__project', flat=True
).distinct())
))
user_projects = Project.objects.filter(id__in=user_projects_ids)
return render_to_response(
......@@ -205,6 +206,7 @@ def user_page(request, user):
'page_profile': profile,
'page_user': user,
'last_changes': last_changes,
'last_changes_url': urlencode({'user': user.username}),
'user_projects': user_projects,
}
)
......
......@@ -114,8 +114,14 @@ Allow translation propagation
You can disable propagation of translations to this subproject from other
subprojects withing same project. This really depends on what you are
translating, sometimes it's desirable to have same string used.
Pre commit script
One of scripts defined in :setting:`PRE_COMMIT_SCRIPTS` which is executed
before commit.
Extra commit file
Additional file to include in commit, usually this one is generated by pre
commit script described above.
.. seealso:: :ref:`faq-vcs`
.. seealso:: :ref:`faq-vcs`, :ref:`processing`
.. note::
......@@ -226,6 +232,48 @@ Weblate makes it easy to interact with others using it's API.
.. seealso:: :ref:`api`
.. _processing:
Pre commit processing of translations
-------------------------------------
In many cases you might want to automatically do some changes to translation
before it is commited to the repository. The pre commit script is exactly the
place to achieve this.
Before using any scripts, you need to list them in
:setting:`PRE_COMMIT_SCRIPTS` configuration variable. Then you can enable them
at :ref:`subproject` configuration as :guilabel:`Pre commit script`.
The hook script is executed using system() call, so it is evaluated in a shell.
It is passed single parameter consisting of file name of current translation.
The script can also generate additional file to be included in the commit. This
can be configured as :guilabel:`Extra commit file` at :ref:`subproject`
configuration. You can use following format strings in the filename:
``%(language)s``
Language code
Example - generating mo files in repository
+++++++++++++++++++++++++++++++++++++++++++
Allow usage of the hook in the configuration
.. code-block:: python
PRE_COMMIT_SCRIPTS = (
'/usr/share/weblate/examples/hook-generate-mo',
)
To enable it, choose now :guilabel:`hook-generate-mo` as :guilabel:`Pre commit
script`. You will also want to add path to generated files to be included in
Git commit, for example ``po/%(language)s.mo`` as :guilabel:`Extra commit file`.
You can find more example scripts in ``examples`` folder within Weblate sources,
their name start with ``hook-``.
User registration
-----------------
......@@ -367,6 +415,179 @@ translation page.
User can also explicitly lock translation for :setting:`LOCK_TIME` seconds.
.. _machine-translation-setup:
Machine translation setup
-------------------------
Weblate has builtin support for several machine translation services and it's
up to adminitrator to enable them. The services have different terms of use, so
please check whether you are allowed to use them before enabling in Weblate.
The individual services are enabled using :setting:`MACHINE_TRANSLATION_SERVICES`.
Amagama
+++++++
Special installation of :ref:`tmserver` run by Virtaal authors.
To enable this service, add ``trans.machine.tmserver.AmagamaTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. seealso:: http://docs.translatehouse.org/projects/virtaal/en/latest/amagama.html
Apertium
++++++++
A free/open-source machine translation platform providing translation to
limited set of languages.
You should get API key from them, otherwise number of requests is rate limited.
To enable this service, add ``trans.machine.apertium.ApertiumTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. seealso::
:setting:`MT_APERTIUM_KEY`, http://www.apertium.org/
Glosbe
++++++
Free dictionary and translation memory for almost every living language.
API is free to use, regarding indicated data source license. There is a limit
of call that may be done from one IP in fixed period of time, to prevent from
abuse.
To enable this service, add ``trans.machine.glosbe.GlosbeTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. seealso::
http://glosbe.com/
Google Translate
++++++++++++++++
Machine translation service provided by Google.
Please note that this does not use (paid) Translation API but rather web based
translation interface.
To enable this service, add ``trans.machine.google.GoogleTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. seealso::
http://translate.google.com/
Microsoft Translator
++++++++++++++++++++
Machine translation service provided by Microsoft.
You need to register at Azure market and use Client ID and secret from there.
To enable this service, add ``trans.machine.microsoft.MicrosoftTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. seealso::
:setting:`MT_MICROSOFT_ID`, :setting:`MT_MICROSOFT_SECRET`,
http://www.microsofttranslator.com/,
https://datamarket.azure.com/developer/applications/
MyMemory
++++++++
Huge translation memory with machine translation.
Free, anonymous usage is currently limited to 100 requests/day, or to 1000
requests/day when you provide contact email in :setting:`MT_MYMEMORY_EMAIL`.
you can also ask them for more.
To enable this service, add ``trans.machine.mymemory.MyMemoryTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. seealso::
:setting:`MT_MYMEMORY_EMAIL`,
:setting:`MT_MYMEMORY_USER`,
:setting:`MT_MYMEMORY_KEY`,
http://mymemory.translated.net/
Open-Tran
+++++++++
Database of open source translations.
To enable this service, add ``trans.machine.opentran.OpenTranTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. seealso::
http://www.open-tran.eu/
.. _tmserver:
tmserver
++++++++
You can run your own translation memory server which is bundled with
Translate-toolkit and let Weblate talk to it. You can also use it with
amaGama server, which is enhanced version of tmserver.
First you will want to import some data to the translation memory:
To enable this service, add ``trans.machine.tmserver.TMServerTranslation`` to
:setting:`MACHINE_TRANSLATION_SERVICES`.
.. code-block:: sh
build_tmdb -d /var/lib/tm/db -s en -t cs locale/cs/LC_MESSAGES/django.po
build_tmdb -d /var/lib/tm/db -s en -t de locale/de/LC_MESSAGES/django.po
build_tmdb -d /var/lib/tm/db -s en -t fr locale/fr/LC_MESSAGES/django.po
Now you can start tmserver to listen to your requests:
.. code-block:: sh
tmserver -d /var/lib/tm/db
.. seealso::
:setting:`MT_TMSERVER`,
http://docs.translatehouse.org/projects/translate-toolkit/en/latest/commands/tmserver.html,
http://amagama.translatehouse.org/
Weblate
+++++++
Weblate can be source of machine translation as well. There are two services to
provide you results - one does exact search for string, the other one finds all
similar strings.
First one is useful for full string translations, the second one for finding
individual phrases or words to keep the translation consistent.
To enable these services, add
``trans.machine.weblatetm.WeblateSimilarTranslation`` (for similar string
maching) and/or ``trans.machine.weblatetm.WeblateTranslation`` (for exact
string maching) to :setting:`MACHINE_TRANSLATION_SERVICES`.
Custom machine translation
++++++++++++++++++++++++++
You can also implement own machine translation services using few lines of
Python code. Following example implements translation to fixed list of
languages using ``dictionary`` Python module:
.. literalinclude:: ../examples/mt_service.py
:language: python
You can list own class in :setting:`MACHINE_TRANSLATION_SERVICES` and Weblate
will start using that.
.. _custom-checks:
Customizing checks
......@@ -386,25 +607,8 @@ Checking translation text does not contain "foo"
This is pretty simple check which just checks whether translation does not
contain string "foo".
.. code-block:: python
from trans.checks import TargetCheck
from django.utils.translation import ugettext_lazy as _
class FooCheck(TargetCheck):
# Used as identifier for check, should be unique
check_id = 'foo'
# Short name used to display failing check
name = _('Foo check')
# Description for failing check
description = _('Your translation is foo')
# Real check code
def check_single(self, source, target, unit):
return 'foo' in target
.. literalinclude:: ../examples/check_foo.py
:language: python
Checking Czech translation text plurals differ
++++++++++++++++++++++++++++++++++++++++++++++
......@@ -412,24 +616,5 @@ Checking Czech translation text plurals differ
Check using language information to verify that two plural forms in Czech
language are not same.
.. code-block:: python
from trans.checks import TargetCheck
from django.utils.translation import ugettext_lazy as _
class PluralCzechCheck(TargetCheck):
# Used as identifier for check, should be unique
check_id = 'foo'
# Short name used to display failing check
name = _('Foo check')
# Description for failing check
description = _('Your translation is foo')
# Real check code
def check(self, sources, targets, unit):
if self.is_language(unit, ['cs']):
return targets[1] == targets[2]
return False
.. literalinclude:: ../examples/check_czech.py
:language: python
Changes
=======
weblate 1.5
weblate 1.6
-----------
Released on ? 2013.
* Nicer error handling on registration.
* Browsing of changes.
* Fixed sorting of machine translation suggestions.
* Improved support for MyMemory machine translation.
* Added support for Amagama machine translation.
* Various optimizations on frequently used pages.
weblate 1.5
-----------
Released on April 16th 2013.
* Please check manual for upgrade instructions.
* Added public user pages.
* Better naming of plural forms.
* Added support for TBX export of glossary.
......@@ -15,6 +28,14 @@ Released on ? 2013.
* Compatible with Django 1.5.
* Avatars are now shown using libravatar.
* Added possibility to pretty print JSON export.
* Various performance improvements.
* Indicate failing checks or fuzzy strings in progress bars for projects or languages as well.
* Added support for custom pre-commit hooks and commiting additional files.
* Rewritten search for better performance and user experience.
* New interface for machine translations.
* Added support for monolingual po files.
* Extend amount of cached metadata to improve speed of various searches.
* Now shows word counts as well.
weblate 1.4
-----------
......
......@@ -49,7 +49,7 @@ copyright = u'2012 - 2013, Michal Čihař'
# built documents.
#
# The short X.Y version.
version = '1.5'
version = '1.6'
# The full version, including alpha/beta/rc tags.
release = version
......
......@@ -65,6 +65,19 @@ CHECK_LIST
List of quality checks to perform on translation.
Some of the checks are not useful for all projects, so you are welcome to
adjust list of performed on your installation.
For example you can enable only few of them:
.. code-block:: python
CHECK_LIST = (
'trans.checks.same.SameCheck',
'trans.checks.format.CFormatCheck',
'trans.checks.chars.ZeroWidthSpaceCheck',
)
.. seealso:: :ref:`checks`, :ref:`custom-checks`
.. setting:: ENABLE_HOOKS
......@@ -140,23 +153,42 @@ Some of exceptions you might want to include:
r'/hooks/(.*)$', # Allowing public access to notification hooks
)
.. setting:: MT_APERTIUM_KEY
.. setting:: MACHINE_TRANSLATION_SERVICES
MT_APERTIUM_KEY
---------------
MACHINE_TRANSLATION_SERVICES
----------------------------
API key for Apertium Web Service, you can register at http://api.apertium.org/register.jsp
List of enabled machine translation services to use.
.. seealso:: :ref:`machine-translation`
.. note::
.. setting:: MT_MICROSOFT_KEY
Many of services need additional configuration like API keys, please check
their documentation for more details.
MT_MICROSOFT_KEY
----------------
.. code-block:: python
API key for Microsoft Translator service, you can register at http://www.bing.com/developers/createapp.aspx
MACHINE_TRANSLATION_SERVICES = (
'trans.machine.apertium.ApertiumTranslation',
'trans.machine.glosbe.GlosbeTranslation',
'trans.machine.google.GoogleTranslation',
'trans.machine.microsoft.MicrosoftTranslation',
'trans.machine.mymemory.MyMemoryTranslation',
'trans.machine.opentran.OpenTranTranslation',
'trans.machine.tmserver.TMServerTranslation',
'trans.machine.weblatetm.WeblateSimilarTranslation',
'trans.machine.weblatetm.WeblateTranslation',
)
.. seealso:: :ref:`machine-translation`
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`
.. setting:: MT_APERTIUM_KEY
MT_APERTIUM_KEY
---------------
API key for Apertium Web Service, you can register at http://api.apertium.org/register.jsp
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`
.. setting:: MT_MICROSOFT_ID
......@@ -165,16 +197,52 @@ MT_MICROSOFT_ID
Cliend ID for Microsoft Translator service.
.. seealso:: :ref:`machine-translation`, https://datamarket.azure.com/developer/applications/
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`, https://datamarket.azure.com/developer/applications/
.. setting:: MT_MICROSOFT_KEY
.. setting:: MT_MICROSOFT_SECRET
MT_MICROSOFT_SECRET
-------------------
Client secret for Microsoft Translator service.
.. seealso:: :ref:`machine-translation`, https://datamarket.azure.com/developer/applications/
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`, https://datamarket.azure.com/developer/applications/
.. setting:: MT_MYMEMORY_EMAIL
MT_MYMEMORY_EMAIL
-----------------
MyMemory identification email, you can get 1000 requests per day with this.
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`, http://mymemory.translated.net/doc/spec.php
.. setting:: MT_MYMEMORY_KEY
MT_MYMEMORY_KEY
---------------
MyMemory access key for private translation memory, use together with :setting:`MT_MYMEMORY_USER`.
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`, http://mymemory.translated.net/doc/keygen.php
.. setting:: MT_MYMEMORY_USER
MT_MYMEMORY_USER
----------------
MyMemory user id for private translation memory, use together with :setting:`MT_MYMEMORY_KEY`.
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`, http://mymemory.translated.net/doc/keygen.php
.. setting:: MT_TMSERVER
MT_TMSERVER
-----------
URL where tmserver is running.
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`, http://docs.translatehouse.org/projects/translate-toolkit/en/latest/commands/tmserver.html
.. setting:: NEARBY_MESSAGES
......@@ -199,6 +267,28 @@ This is recommended setup for production use.
.. seealso:: :ref:`fulltext`
.. setting:: PRE_COMMIT_SCRIPTS
PRE_COMMIT_SCRIPTS
------------------
List of scripts which are allowed as pre commit scripts. The script needs to be
later enabled in subproject configuration.
For example you can allow script which does some cleanup:
.. code-block:: python
PRE_COMMIT_SCRIPTS = (
'/usr/local/bin/cleanup-translation',
)
.. note::
The hook is executed using system() call, so it is evaluated in a shell.
.. seealso:: :ref:`processing`
.. setting:: REGISTRATION_OPEN
REGISTRATION_OPEN
......@@ -212,14 +302,6 @@ True will be assumed if it is not supplied.
This is actually django-registration settings.
.. setting:: SIMILAR_MESSAGES
SIMILAR_MESSAGES
----------------
Number of similar messages to lookup. This is not a hard limit, just a
number Weblate tries to find if it is possible.
.. setting:: SITE_TITLE
SITE_TITLE
......@@ -233,4 +315,3 @@ WHOOSH_INDEX
------------
Directory where Whoosh fulltext indices will be stored. Defaults to :file:`whoosh-index` subdirectory.
......@@ -133,6 +133,44 @@ How do I provide feedback on source string?
On context tabs below translation, you can use :guilabel:`Source` tab to
provide feedback on source string or discuss it with other translators.
How can I use existing translations while translating?
------------------------------------------------------
Weblate provides you several ways to utilize existing translations while
translating:
- You can use import functionality to load compendium as translations,
suggestions or fuzzy translations. This is best approach for one time
translation using compedium or similar translation database.
- You can setup :ref:`tmserver` with all databases you have and let Weblate use
it. This is good for case when you want to use it for several times during
translating.
- Another option is to translate all related projects in single Weblate
instance, what will make it automatically pick up translation from other
projects as well.
.. seealso:: :ref:`machine-translation-setup`, :ref:`machine-translation`
Does Weblate update translation files besides translations?
-----------------------------------------------------------
Weblate tries to limit changes in translation files to minimum. For some file
formats it might unfortunately lead to reformatting the file. If you want to
keep the file formattted in your way, please use pre commit hook for that.
For monolingual files (see :ref:`formats`) Weblate might add new translation
units which are present in the :guilabel:`template` and not in actual
translations. It does not however perform any automatic cleanup of stale
strings as it might have unexpected outcome. If you want to do this, please
install pre commit hook which will handle the cleanup according to your needs.
Weblate also will not try to update bilingual files in any way, so if you need
:file:`po` files being updated from :file:`pot`, you need to do it on
your own.
.. seealso:: :ref:`processing`
Where do language definition come from and how can I add own?
-------------------------------------------------------------
......
......@@ -9,6 +9,21 @@ tested formats.
.. seealso:: `Supported formats in translate-toolkit`_
Weblate does support both monolingual and bilingual formats. Bilingual formats
store two languages in single file - source and translation (typical examples
is :ref:`gettext`, :ref:`xliff` or :ref:`apple`). On the other side,
monolingual formats identify the string by ID and each language file contains
only mapping of those to given language (typically :ref:`aresource`). Some file
formats are used in both variants, see detailed description below.
For correct use of monolingual files, Weblate requires access to file
containing complete list of strings to translate with their source - this file
is called :guilabel:`template` within Weblate, though the naming might vary in
your application.
.. _gettext:
GNU Gettext
-----------
......@@ -20,12 +35,24 @@ headers or linking to corresponding source files.
.. seealso:: https://en.wikipedia.org/wiki/Gettext
Monolingual Gettext
+++++++++++++++++++
Some projects decide to use Gettext as monolingual formats - they code just IDs
in their source code and the string needs to be translated to all languages,
including English. Weblate does support this, though you have to choose explicitely
this file format when importing resources into Weblate.
.. _xliff:
XLIFF
-----
XML based format created to standardize translation files, but in the end it
is one of many standards in this area.
XLIFF is usually used as bilingual.
.. seealso:: https://en.wikipedia.org/wiki/XLIFF
Java properties
......@@ -33,6 +60,8 @@ Java properties
Native Java format for translations.
Java properties are usually used as bilingual.
.. seealso:: https://en.wikipedia.org/wiki/.properties
Qt Linguist .ts
......@@ -40,13 +69,20 @@ Qt Linguist .ts
Translation format used in Qt based applications.
Qt Linguist files are used as both bilingual and monolingual.
.. seealso:: http://qt-project.org/doc/qt-4.8/linguist-manual.html
.. _aresource:
Android string resources
------------------------
Android specific file format for translating applications.
Android string resources are monolingual, the :guilabel:`template` file being
stored in different location than others :file:`res/values/strings.xml`.
.. seealso:: https://developer.android.com/guide/topics/resources/string-resource.html
.. note::
......@@ -54,12 +90,16 @@ Android specific file format for translating applications.
This format is not yet supported by Translate-toolkit (merge request is
pending), but Weblate includes own support for it.
.. _apple:
Apple OS X strings
------------------
Apple specific file format for translating applications, used for both OS X
and iPhone/iPad application translations.
Apple OS X strings are usually used as bilingual.
.. seealso:: https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html
.. note::
......
......@@ -28,6 +28,8 @@ south
http://south.aeracode.org/
libravatar (optional for federated avatar support)
https://pypi.python.org/pypi/pyLibravatar
PyICU (optional for proper sorting of strings)
https://pypi.python.org/pypi/PyICU
Database backend
Any database supported in Django will work, check their documentation for more details.
......@@ -39,7 +41,7 @@ On Debian or Ubuntu, all requirements are already packaged, to install them you
.. code-block:: sh
apt-get install python-django translate-toolkit python-git python-django-registration \
python-whoosh python-cairo python-gtk2 python-django-south
python-whoosh python-cairo python-gtk2 python-django-south python-libravatar python-pyicu
# Optional for database backend
......@@ -298,6 +300,18 @@ you install `pyLibavatar`_, you will get proper support for federated avatars.
.. _pyLibavatar: https://pypi.python.org/pypi/pyLibravatar
.. _production-pyicu:
PyICU library
+++++++++++++
`PyICU`_ library is optionally used by Weblate to sort unicode strings. This
way language names are properly sorted even in non-ascii languages like
Japanese, Chinese or Arabic or for languages with accented letters.
.. _PyICU: https://pypi.python.org/pypi/PyICU
.. _server:
Running server
......@@ -490,10 +504,21 @@ Several internal modules and paths have been renamed and changed, please adjust
your :file:`settings.py` to match that (consult :file:`settings_example.py` for
correct values).
* Many modules lost their `weblate.` prefix.
* Many modules lost their ``weblate.`` prefix.
* Checks were moved to submodules.
* Locales were moved to top level directory.
The migration of database structure to 1.5 might take quite long, it is
recommended to put your site offline, while the migration is going on.
.. note::
If you have update in same directory, stale :file:`*.pyc` files might be
left around and cause various import errors. To recover from this, delete
all of them in Weblate's directory, for example by
``find . -name '*.pyc' - delete``.
Migrating from Pootle
---------------------
......
......@@ -201,33 +201,9 @@ Machine translation
Based on configuration and your language, Weblate provides buttons for following
machine translation tools.
MyMemory
++++++++
All machine translations are available on single tab on translation page.
Huge translation memory with machine translation.
.. seealso::
http://mymemory.translated.net/
Apertium
++++++++
A free/open-source machine translation platform providing translation to
limited set of languages.
.. seealso::
http://www.apertium.org/
Microsoft Translator
++++++++++++++++++++
Machine translation service provided by Microsoft.
.. seealso::
http://www.microsofttranslator.com/
.. seealso:: :ref:`machine-translation-setup`
.. _checks:
......
......@@ -17,62 +17,26 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
'''
Quality check example for Czech plurals.
'''
from trans.checks import TargetCheck
from django.utils.translation import ugettext_lazy as _
# Set of ignored words
IGNORE_WORDS = frozenset([
'a',
'an',
'and',
'are',
'as',
'at',
'be',
'but',
'by',
'for',
'if',
'in',
'into',
'is',
'it',
'no',
'not',
'of',
'on',
'or',
's',
'such',
't',
'that',
'the',
'their',
'then',
'there',
'these',
'they',
'this',
'to',
'was',
'will',
'with',
])
class PluralCzechCheck(TargetCheck):
# Set of words to ignore in similar lookup
IGNORE_SIMILAR = frozenset([
'also',
'class',
'href',
'http',
'me',
'most',
'net',
'per',
'span',
'their',
'theirs',
'you',
'your',
'yours',
'www',
]) | IGNORE_WORDS
# Used as identifier for check, should be unique
check_id = 'foo'
# Short name used to display failing check
name = _('Foo check')
# Description for failing check
description = _('Your translation is foo')
# Real check code
def check(self, sources, targets, unit):
if self.is_language(unit, ['cs']):
return targets[1] == targets[2]
return False
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2013 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <http://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
'''
Simple quality check example.
'''
from trans.checks import TargetCheck
from django.utils.translation import ugettext_lazy as _
class FooCheck(TargetCheck):
# Used as identifier for check, should be unique
check_id = 'foo'
# Short name used to display failing check
name = _('Foo check')
# Description for failing check
description = _('Your translation is foo')
# Real check code
def check_single(self, source, target, unit):
return 'foo' in target
#!/bin/sh
# Example Weblate hook to generate mo file from po file
msgfmt -o "${1%.po}.mo" "${1}"
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2013 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <http://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
'''
Machine translation example.
'''
from trans.machine.base import MachineTranslation
import dictionary
class SampleTranslation(MachineTranslation):
'''
Sample machine translation interface.
'''
name = 'Sample'
def download_languages(self):
'''
Returns list of languages your machine translation supports.
'''
return set(('cs',))
def download_translations(self, language, text, unit):
'''
Returns tuple with translations.
'''
return [(t, 100, self.name, text) for t in dictionary.translate(text)]
......@@ -20,9 +20,10 @@
from django.db import models
from django.utils.translation import ugettext as _, pgettext_lazy
from django.db.models import Sum
from django.utils.safestring import mark_safe
from translate.lang.data import languages
from lang import data
from trans.mixins import PercentMixin
from south.signals import post_migrate
from django.db.models.signals import post_syncdb
......@@ -92,6 +93,16 @@ def get_plural_type(code, pluralequation):
class LanguageManager(models.Manager):
_default_lang = None
def get_default(self):
'''
Returns default source language object.
'''
if self._default_lang is None:
self._default_lang = self.get(code='en')
return self._default_lang
def auto_get_or_create(self, code):
'''
Gets matching language for code (the code does not have to be exactly
......@@ -204,7 +215,7 @@ class LanguageManager(models.Manager):
lang.set_direction()
# Get plural type
lang.plural_tupe = get_plural_type(
lang.plural_type = get_plural_type(
lang.code,
lang.pluralequation
)
......@@ -311,7 +322,7 @@ PLURAL_NAMES = {
}
class Language(models.Model):
class Language(models.Model, PercentMixin):
PLURAL_CHOICES = (
(PLURAL_NONE, 'None'),
(PLURAL_ONE_OTHER, 'One/other (classic plural)'),
......@@ -345,6 +356,13 @@ class Language(models.Model):
class Meta:
ordering = ['name']
def __init__(self, *args, **kwargs):
'''
Constructor to initialize some cache properties.
'''
super(Language, self).__init__(*args, **kwargs)
self._percents = None
def __unicode__(self):
if (not '(' in self.name
and ('_' in self.code or '-' in self.code)
......@@ -377,33 +395,31 @@ class Language(models.Model):
'lang': self.code
})
def get_translated_percent(self):
def _get_percents(self):
'''
Returns status of translations in this language.
Returns percentages of translation status.
'''
from trans.models import Translation
# Use cache if available
if self._percents is not None:
return self._percents
translations = Translation.objects.filter(
language=self
).aggregate(
Sum('translated'),
Sum('total')
)
# Import translations
from trans.models.translation import Translation
# Get prercents
result = Translation.objects.get_percents(language=self)
translated = translations['translated__sum']
total = translations['total__sum']
# Update cache
self._percents = result
# Prevent division by zero on no translations
if total == 0:
return 0
return round(translated * 100.0 / total, 1)
return result
def get_html(self):
'''
Returns html attributes for markup in this language, includes
language and direction.
'''
return 'lang="%s" dir="%s"' % (self.code, self.direction)
return mark_safe('lang="%s" dir="%s"' % (self.code, self.direction))
def fixup_name(self):
'''
......
This diff is collapsed.
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,67 +17,56 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, c-format
msgid "The request for machine translation using %s has failed:"
msgstr ""
#: weblate/media/loader.js:64
msgid "Error details:"
#: weblate/media/loader.js:103
msgid "The request for machine translation has failed:"
msgstr ""
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr ""
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr ""
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr ""
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr ""
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr ""
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr ""
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr ""
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr ""
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr ""
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr ""
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr ""
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr ""
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr ""
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-01-18 08:26+0200\n"
"Last-Translator: Joan Montané <joan@montane.cat>\n"
"Language-Team: Catalan <http://l10n.cihar.com/projects/weblate/javascript/ca/"
......@@ -19,67 +19,74 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "La traducció ha fallat"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "La petició de traducció automàtica ha fallat."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Detalls de l'error:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Tradueix amb l'Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Tradueix amb el Microsoft Translator"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Tradueix amb el MyMemory"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "La petició de traducció automàtica ha fallat."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Ordena aquesta columna"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Cadenes amb comprovacions fallides"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Cadenes dubtoses"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Cadenes traduïdes"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "La petició AJAX per carregar aquest contingut ha fallat!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "S'està carregant..."
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Confirmeu la reinicialització del dipòsit"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "La reinicialització del dipòsit esborrarà tots els canvis locals!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "D'acord"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Cancel·la"
#~ msgid "Failed translation"
#~ msgstr "La traducció ha fallat"
#~ msgid "Error details:"
#~ msgstr "Detalls de l'error:"
#~ msgid "Translate using Apertium"
#~ msgstr "Tradueix amb l'Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Tradueix amb el Microsoft Translator"
#~ msgid "Translate using MyMemory"
#~ msgstr "Tradueix amb el MyMemory"
This diff is collapsed.
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"PO-Revision-Date: 2012-11-28 09:35+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-04-10 16:53+0200\n"
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
"Language-Team: Czech <http://l10n.cihar.com/projects/weblate/javascript/cs/"
">\n"
......@@ -17,73 +17,77 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 1.4-dev\n"
"X-Generator: Weblate 1.5-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Překlad selhal"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr "Kopírovat"
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
msgstr "Požadavek na strojový překlad selhal."
#: weblate/media/loader.js:91
#, c-format
msgid "The request for machine translation using %s has failed:"
msgstr "Požadavek na strojový překlad pomocí %s selhal:"
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Podrobnosti chyby:"
#: weblate/media/loader.js:103
msgid "The request for machine translation has failed:"
msgstr "Požadavek na strojový překlad selhal:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Přeložit pomocí Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Přeložit pomocí Microsoft Translatoru"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Přeložit pomocí MyMemory"
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Seřadit tento sloupec"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Řetězce s jakoukoliv selhavší kontrolou"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Nejasné řetězce"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Přeložené řetězce"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "AJAX požadavek na nahrání obsahu selhal!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Načítám…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Potvrďte resetování repozitáře"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "Resetování repositáře zahodí veškeré změny!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Ok"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Zrušit"
#~ msgid "Failed translation"
#~ msgstr "Překlad selhal"
#~ msgid "Error details:"
#~ msgstr "Podrobnosti chyby:"
#~ msgid "Translate using Apertium"
#~ msgstr "Přeložit pomocí Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Přeložit pomocí Microsoft Translatoru"
#~ msgid "Translate using MyMemory"
#~ msgstr "Přeložit pomocí MyMemory"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Načítám…"
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-02-07 00:18+0200\n"
"Last-Translator: Morten Henrichsen <github@mhex.dk>\n"
"Language-Team: Danish <http://l10n.cihar.com/projects/weblate/javascript/da/"
......@@ -19,71 +19,78 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 1.5-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Oversættelse mislykkedes"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "Forespørgsel af maskinoversættelse mislykkedes."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Fejlbeskrivelse:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Oversæt med Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Oversæt med Microsoft Translator"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Oversæt med MyMemory"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "Forespørgsel af maskinoversættelse mislykkedes."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Sorter denne kolonne"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Strenge med enhver slags mislykkede tjek"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Uklare strenge"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Oversatte strenge"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "AJAX-forespørgsel om indlæsning af dette indhold fejlede!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Indlæser…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Bekræft nulstilling af arkiv"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "Nulstilling af arkivet vil forkaste alle lokale ændringer!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "OK"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Annuller"
#~ msgid "Failed translation"
#~ msgstr "Oversættelse mislykkedes"
#~ msgid "Error details:"
#~ msgstr "Fejlbeskrivelse:"
#~ msgid "Translate using Apertium"
#~ msgstr "Oversæt med Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Oversæt med Microsoft Translator"
#~ msgid "Translate using MyMemory"
#~ msgstr "Oversæt med MyMemory"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Indlæser …"
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-01-17 14:32+0200\n"
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
"Language-Team: German <http://l10n.cihar.com/projects/weblate/javascript/de/"
......@@ -19,71 +19,78 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Fehlerhafte Übersetzung"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "Die Anforderung für die maschinelle Übersetzung ist fehlgeschlagen."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Fehlerdetails:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Mit Apertium übersetzen"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Mit Microsoft Translator übersetzen"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Mit MyMemory übersetzen"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "Die Anforderung für die maschinelle Übersetzung ist fehlgeschlagen."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Diese Spalte sortieren"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr ""
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Ungenaue Zeichenketten"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Übersetzte Zeichenketten"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "AJAX-Anfrage zum Laden dieser Inhalte ist fehlgeschlagen!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Wird geladen…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Bestätige das Ersetzen des Repository"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr ""
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Ok"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Abbrechen"
#~ msgid "Failed translation"
#~ msgstr "Fehlerhafte Übersetzung"
#~ msgid "Error details:"
#~ msgstr "Fehlerdetails:"
#~ msgid "Translate using Apertium"
#~ msgstr "Mit Apertium übersetzen"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Mit Microsoft Translator übersetzen"
#~ msgid "Translate using MyMemory"
#~ msgstr "Mit MyMemory übersetzen"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Wird geladen…"
This diff is collapsed.
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"PO-Revision-Date: 2012-11-28 10:53+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-04-11 08:09+0200\n"
"Last-Translator: Panagiotis Papazoglou <papaz_p@yahoo.com>\n"
"Language-Team: Greek <http://l10n.cihar.com/projects/weblate/javascript/el/"
">\n"
......@@ -16,74 +16,78 @@ msgstr ""
"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-Generator: Weblate 1.4-dev\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 1.5-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Αποτυχημένη μετάφραση"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr "Αντιγραφή"
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
msgstr "Το αίτημα για μηχανική μετάφραση απέτυχε."
#: weblate/media/loader.js:91
#, c-format
msgid "The request for machine translation using %s has failed:"
msgstr "Το αίτημα για μηχανική μετάφραση με χρήση της %s απέτυχε:"
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Λεπτομέρειες σφάλματος:"
#: weblate/media/loader.js:103
msgid "The request for machine translation has failed:"
msgstr "Το αίτημα για μηχανική μετάφραση απέτυχε:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Μετάφραση με χρήση του Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Μετάφραση με χρήση του Microsoft Translator"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Μετάφραση με χρήση του MyMemory"
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Ταξινόμηση αυτής της στήλης"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Κείμενα με οποιαδήποτε αποτυχία ελέγχων"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Ασαφή κείμενα"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Μεταφρασμένα κείμενα"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "Το αίτημα AJAX για φόρτωση αυτού του περιεχομένου απέτυχε!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Φόρτωση…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Επιβεβαίωση επαναφοράς αποθετηρίου"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "Η επαναφορά του αποθετηρίου θα απομακρύνει όλες τις τοπικές αλλαγές!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Εντάξει"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Άκυρο"
#~ msgid "Failed translation"
#~ msgstr "Αποτυχημένη μετάφραση"
#~ msgid "Error details:"
#~ msgstr "Λεπτομέρειες σφάλματος:"
#~ msgid "Translate using Apertium"
#~ msgstr "Μετάφραση με χρήση του Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Μετάφραση με χρήση του Microsoft Translator"
#~ msgid "Translate using MyMemory"
#~ msgstr "Μετάφραση με χρήση του MyMemory"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Φόρτωση…"
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-03-01 11:40+0200\n"
"Last-Translator: Robert Readman <robert_readman@hotmail.com>\n"
"Language-Team: English (United Kingdom) <http://l10n.cihar.com/projects/"
......@@ -19,67 +19,74 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 1.5-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Failed translation"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "The request for machine translation has failed."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Error details:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Translate using Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Translate using Microsoft Translator"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Translate using MyMemory"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "The request for machine translation has failed."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Sort this column"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Strings with any failing checks"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Fuzzy strings"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Translated strings"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "AJAX request to load this content has failed!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Loading…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Confirm resetting repository"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "Resetting the repository will throw away all local changes!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Ok"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Cancel"
#~ msgid "Failed translation"
#~ msgstr "Failed translation"
#~ msgid "Error details:"
#~ msgstr "Error details:"
#~ msgid "Translate using Apertium"
#~ msgstr "Translate using Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Translate using Microsoft Translator"
#~ msgid "Translate using MyMemory"
#~ msgstr "Translate using MyMemory"
This diff is collapsed.
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate website\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"PO-Revision-Date: 2013-02-18 12:47+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-04-11 00:22+0200\n"
"Last-Translator: Matías Bellone <matiasbellone+weblate@gmail.com>\n"
"Language-Team: Spanish <http://l10n.cihar.com/projects/weblate/javascript/es/"
">\n"
......@@ -19,71 +19,75 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 1.5-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Falló la traducción"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr "Copiar"
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
msgstr "Falló el pedido para la traducción automática."
#: weblate/media/loader.js:91
#, c-format
msgid "The request for machine translation using %s has failed:"
msgstr "Falló el pedido para la traducción automática utilizando %s:"
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Detalles de error:"
#: weblate/media/loader.js:103
msgid "The request for machine translation has failed:"
msgstr "Falló el pedido para la traducción automática:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Traducir con Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Traducir con Microsoft Translator"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Traducir con MyMemory"
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Ordenar esta columna"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Cadenas con chequeos fallidos"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Cadenas parciales"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Cadenas traducidas"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "¡Falló el pedido AJAX para cargar este contenido!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Cargando…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Confirmar reinicialización del repositorio"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "¡Reinicializar el repositorio descartará todos los cambios locales!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Aceptar"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Cancelar"
#~ msgid "Failed translation"
#~ msgstr "Falló la traducción"
#~ msgid "Error details:"
#~ msgstr "Detalles de error:"
#~ msgid "Translate using Apertium"
#~ msgstr "Traducir con Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Traducir con Microsoft Translator"
#~ msgid "Translate using MyMemory"
#~ msgstr "Traducir con MyMemory"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Cargando…"
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2012-11-28 09:35+0200\n"
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
"Language-Team: Finnish <http://l10n.cihar.com/projects/weblate/javascript/fi/"
......@@ -19,72 +19,79 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Epäonnistunut käännös"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "Pyyntö koneellisen käännöksen tekemiseen on epäonnistunut."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Virheen lisätiedot:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Käännä käyttämällä Apertiumia"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Käännä käyttämällä Microsoft Kääntäjää"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Käännä käyttämällä MyMemoryä"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "Pyyntö koneellisen käännöksen tekemiseen on epäonnistunut."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Järjestä tämä sarake"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr ""
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Epäselvät merkkijonot"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
#, fuzzy
msgid "Translated strings"
msgstr "Käännä käyttämällä Apertiumia"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "AJAX pyyntö tämän sisällön lataamiseksi on epäonnistunut!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Ladataan…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr ""
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr ""
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr ""
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr ""
#~ msgid "Failed translation"
#~ msgstr "Epäonnistunut käännös"
#~ msgid "Error details:"
#~ msgstr "Virheen lisätiedot:"
#~ msgid "Translate using Apertium"
#~ msgstr "Käännä käyttämällä Apertiumia"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Käännä käyttämällä Microsoft Kääntäjää"
#~ msgid "Translate using MyMemory"
#~ msgstr "Käännä käyttämällä MyMemoryä"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Ladataan…"
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2012-11-29 14:10+0200\n"
"Last-Translator: Alexandre Dupas <alexandre.dupas@gmail.com>\n"
"Language-Team: French <http://l10n.cihar.com/projects/weblate/javascript/fr/"
......@@ -19,71 +19,78 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Échec de traduction"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "La requête de traduction machine a échoué."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Détails de l'erreur : "
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Traduire au moyen d'Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Traduire au moyen de Microsoft Translator"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Traduire au moyen de MyMemory"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "La requête de traduction machine a échoué."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Trier cette colonne"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Chaînes avec des vérifications échouées"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Chaînes floues"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Chaînes traduites"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "La requête AJAX pour charger ce contenu a échoué !"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Chargement…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Confirmer la réinitialisation du dépôt"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "La réinitialisation du dépôt effacera tous les changements locaux !"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Ok"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Annuler"
#~ msgid "Failed translation"
#~ msgstr "Échec de traduction"
#~ msgid "Error details:"
#~ msgstr "Détails de l'erreur : "
#~ msgid "Translate using Apertium"
#~ msgstr "Traduire au moyen d'Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Traduire au moyen de Microsoft Translator"
#~ msgid "Translate using MyMemory"
#~ msgstr "Traduire au moyen de MyMemory"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Chargement…"
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2012-11-28 09:35+0200\n"
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
"Language-Team: Galician <http://l10n.cihar.com/projects/weblate/javascript/"
......@@ -19,72 +19,79 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Fallou a tradución"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "Fallou a solicitude á máquina de tradución automática."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Detalles do erro:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Traducir con Apertium"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Traducir con Microsoft Translator"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Traducir con MyMemory"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "Fallou a solicitude á máquina de tradución automática."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Ordenar esta columna"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr ""
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Cadeas revisábeis"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
#, fuzzy
msgid "Translated strings"
msgstr "Traducir con Apertium"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "Fallou a solicitude AJAX ao cargar este contido!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Cargando…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Confirmar o restabelecemento do repositorio"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "O reinicio do repositorio desfará todos os cambios locais!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Aceptar"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Cancelar"
#~ msgid "Failed translation"
#~ msgstr "Fallou a tradución"
#~ msgid "Error details:"
#~ msgstr "Detalles do erro:"
#~ msgid "Translate using Apertium"
#~ msgstr "Traducir con Apertium"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Traducir con Microsoft Translator"
#~ msgid "Translate using MyMemory"
#~ msgstr "Traducir con MyMemory"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Cargando…"
This diff is collapsed.
# 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: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2013-04-17 11:13+0200\n"
"Last-Translator: Efraim Flashner <efraim.flashner@gmail.com>\n"
"Language-Team: Hebrew <http://l10n.cihar.com/projects/weblate/javascript/he/"
">\n"
"Language: he\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-Generator: Weblate 1.5\n"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr "העתק"
#: weblate/media/loader.js:91
#, c-format
msgid "The request for machine translation using %s has failed:"
msgstr "הבקשה לתרגום אוטומטי בשימוש %s נכשל:"
#: weblate/media/loader.js:103
msgid "The request for machine translation has failed:"
msgstr "הבקשה לתרגום אוטומטי נכשל:"
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "למיין עמודה זו"
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "מחרוזות עם בדיקות כלשהן שנכשלו"
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "מחרוזות בספק"
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "מחרוזות מתורגמות"
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "בקשת AJAX לטעון תוכן זה נכשל!"
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "טוען…"
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "לאשר את מאגר איפוס"
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "איפוס המאגר להשליך כל שינויים מקומיים!"
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "אישור"
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "ביטול"
This diff is collapsed.
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: 2012-12-14 12:12+0200\n"
"Last-Translator: Péter Báthory <bathory@index.hu>\n"
"Language-Team: Hungarian <http://l10n.cihar.com/projects/weblate/javascript/"
......@@ -19,71 +19,78 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
msgstr "Sikertelen fordítás"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, fuzzy, c-format
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation using %s has failed:"
msgstr "A gépi fordítási kérés sikertelen volt."
#: weblate/media/loader.js:64
msgid "Error details:"
msgstr "Hiba részletei:"
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr "Fordítás Apertium segítségével"
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr "Fordítás Microsoft Translator segítségével"
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr "Fordítás MyMemory segítségével"
#: weblate/media/loader.js:103
#, fuzzy
#| msgid "The request for machine translation has failed."
msgid "The request for machine translation has failed:"
msgstr "A gépi fordítási kérés sikertelen volt."
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr "Oszlop rendezése"
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr "Ellenőrzési hibás karakterláncok"
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr "Zavaros szövegek"
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr "Lefordított szövegek"
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr "A tartalom betöltésére indított AJAX kérés sikertelenül végződött!"
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr "Betöltés…"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr "Tároló visszaállításának megerősítése"
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr "A tároló visszaállítása az összes helyi változtatást el fogja vetni!"
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr "Ok"
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr "Mégsem"
#~ msgid "Failed translation"
#~ msgstr "Sikertelen fordítás"
#~ msgid "Error details:"
#~ msgstr "Hiba részletei:"
#~ msgid "Translate using Apertium"
#~ msgstr "Fordítás Apertium segítségével"
#~ msgid "Translate using Microsoft Translator"
#~ msgstr "Fordítás Microsoft Translator segítségével"
#~ msgid "Translate using MyMemory"
#~ msgstr "Fordítás MyMemory segítségével"
#, fuzzy
#~ msgid "Loading..."
#~ msgstr "Betöltés…"
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2013-04-02 12:03+0200\n"
"POT-Creation-Date: 2013-04-18 17:59+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -18,67 +18,56 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
#: weblate/media/loader.js:64
msgid "Failed translation"
#: weblate/media/loader.js:74
msgid "Copy"
msgstr ""
#: weblate/media/loader.js:64
msgid "The request for machine translation has failed."
#: weblate/media/loader.js:91
#, c-format
msgid "The request for machine translation using %s has failed:"
msgstr ""
#: weblate/media/loader.js:64
msgid "Error details:"
#: weblate/media/loader.js:103
msgid "The request for machine translation has failed:"
msgstr ""
#: weblate/media/loader.js:87
msgid "Translate using Apertium"
msgstr ""
#: weblate/media/loader.js:109
msgid "Translate using Microsoft Translator"
msgstr ""
#: weblate/media/loader.js:123
msgid "Translate using MyMemory"
msgstr ""
#: weblate/media/loader.js:177
#: weblate/media/loader.js:167
msgid "Sort this column"
msgstr ""
#: weblate/media/loader.js:238
#: weblate/media/loader.js:228
msgid "Strings with any failing checks"
msgstr ""
#: weblate/media/loader.js:239
#: weblate/media/loader.js:229
msgid "Fuzzy strings"
msgstr ""
#: weblate/media/loader.js:240
#: weblate/media/loader.js:230
msgid "Translated strings"
msgstr ""
#: weblate/media/loader.js:294 weblate/media/loader.js.c:310
#: weblate/media/loader.js:325 weblate/media/loader.js.c:367
#: weblate/media/loader.js:280 weblate/media/loader.js.c:296
#: weblate/media/loader.js:323 weblate/media/loader.js.c:365
msgid "AJAX request to load this content has failed!"
msgstr ""
#: weblate/media/loader.js:307 weblate/media/loader.js.c:364
#: weblate/media/loader.js:293 weblate/media/loader.js.c:362
msgid "Loading…"
msgstr ""
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Confirm resetting repository"
msgstr ""
#: weblate/media/loader.js:338
#: weblate/media/loader.js:336
msgid "Resetting the repository will throw away all local changes!"
msgstr ""
#: weblate/media/loader.js:343
#: weblate/media/loader.js:341
msgid "Ok"
msgstr ""
#: weblate/media/loader.js:350
#: weblate/media/loader.js:348
msgid "Cancel"
msgstr ""
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -161,4 +161,4 @@ max-attributes=25
min-public-methods=0
# Maximum number of public methods for a class (see R0904).
max-public-methods=80
max-public-methods=85
......@@ -4,8 +4,8 @@
set -e
# Update po files itself
./manage.py makemessages -a -i 'repos/*' -i 'docs/*'
./manage.py makemessages -a -i 'repos/*' -i 'docs/*' -d djangojs
./manage.py makemessages -a -i 'repos/*' -i 'docs/*' -i 'examples/*'
./manage.py makemessages -a -i 'repos/*' -i 'docs/*' -i 'examples/*' -d djangojs
# Fix Report-Msgid-Bugs-To as it gets removed
sed -i 's/"Report-Msgid-Bugs-To:.*/"Report-Msgid-Bugs-To: weblate@lists.cihar.com\\n"/' locale/*/*/*.po
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment