Commit 0ba0a168 authored by Justin Hamade's avatar Justin Hamade

Merge pull request #1 from nijel/master

Update from upstream
parents 0f43fbfc bb5699af
......@@ -30,6 +30,7 @@ before_script:
script:
- ./scripts/generate-locales
- ./manage.py validate --settings weblate.settings_test
- if [[ $TRAVIS_DATABASE = sqlite ]] ; then ./travis/migrate-testing ; fi
- ./manage.py syncdb --noinput --settings weblate.settings_test
- ./manage.py migrate --settings weblate.settings_test --traceback
- coverage run --source=. ./manage.py test --settings weblate.settings_test $TRAVIS_RUN_TESTS
......
# Weblate
[![Build Status](https://travis-ci.org/nijel/weblate.svg)](https://travis-ci.org/nijel/weblate)
[![Coverage Status](https://coveralls.io/repos/nijel/weblate/badge.png?branch=master)](https://coveralls.io/r/nijel/weblate?branch=master)
[![Translation status](http://l10n.cihar.com/widgets/weblate-shields-badge.png)](https://l10n.cihar.com/engage/weblate/?utm_source=widget)
[![Coverage Status](https://img.shields.io/coveralls/nijel/weblate.svg)](https://coveralls.io/r/nijel/weblate?branch=master)
[![Translation status](http://l10n.cihar.com/widgets/weblate-shields-badge.svg)](https://l10n.cihar.com/engage/weblate/?utm_source=widget)
[![Code Health](https://landscape.io/github/nijel/weblate/master/landscape.png)](https://landscape.io/github/nijel/weblate/master)
[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=253393)](https://www.bountysource.com/trackers/253393-weblate?utm_source=253393&utm_medium=shield&utm_campaign=TRACKER_BADGE)
[![tip for next commit](http://tip4commit.com/projects/497.svg)](http://tip4commit.com/projects/497)
Weblate is a free web-based translation tool with tight Git integration. It
......
......@@ -26,7 +26,7 @@ PIL or Pillow library
http://python-imaging.github.io/
lxml (>= 3.1.0)
http://lxml.de/
south
South (>= 0.7.5)
http://south.aeracode.org/
libravatar (optional for federated avatar support)
https://pypi.python.org/pypi/pyLibravatar
......
This source diff could not be displayed because it is too large. You can view the blob instead.
# Azerbaijani translations for PACKAGE package.
# Copyright (C) 2014 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Automatically generated, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2014-05-06 13:05+0200\n"
"PO-Revision-Date: 2014-06-24 00:22+0200\n"
"Last-Translator: Sevdimali İsa <sevdimaliisayev@mail.ru>\n"
"Language-Team: Azerbaijani "
"<https://l10n.cihar.com/projects/weblate/javascript/az/>\n"
"Language: az\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.10-dev\n"
#. Translators: Verb for copy operation
#: weblate/media/loader.js:78
msgid "Copy"
msgstr "Kopyala"
#: weblate/media/loader.js:95
#, c-format
msgid "The request for machine translation using %s has failed:"
msgstr "%s istifadə edərək maşın tərcüməsi istəyi uğursuz oldu:"
#: weblate/media/loader.js:107
msgid "The request for machine translation has failed:"
msgstr "Maşın tərcüməsi üçün istək uğursuz oldu:"
#: weblate/media/loader.js:171
msgid "Sort this column"
msgstr "Bu sütunu sırala"
#: weblate/media/loader.js:232
msgid "Strings with any failing checks"
msgstr "Hər hansı uğursuz yoxlaması olan sətir"
#: weblate/media/loader.js:233
msgid "Fuzzy strings"
msgstr "Qeyri-səlis sətirlər"
#: weblate/media/loader.js:234
msgid "Translated strings"
msgstr "Tərcümə edilmiş sətir"
#: weblate/media/loader.js:325 weblate/media/loader.js.c:336
#: weblate/media/loader.js:366 weblate/media/loader.js.c:408
msgid "AJAX request to load this content has failed!"
msgstr "Bu məzmunu yükləmək üçün AJAX sorğusu uğursuz oldu!"
#: weblate/media/loader.js:333 weblate/media/loader.js.c:405
msgid "Loading…"
msgstr "Yüklənir…"
#: weblate/media/loader.js:379
msgid "Confirm resetting repository"
msgstr "Hovuzu sıfırlamağı təsdiqlə"
#: weblate/media/loader.js:379
msgid "Resetting the repository will throw away all local changes!"
msgstr "Hovuzu sıfırlamaq bütün lokal dəyişiklikləri siləcəkdir!"
#: weblate/media/loader.js:384
msgid "Ok"
msgstr "OK"
#: weblate/media/loader.js:391
msgid "Cancel"
msgstr "Ləğv et"
#: weblate/media/loader.js:495
msgid "There are some unsaved changes, are you sure you want to leave?"
msgstr "Yaddaşa verilməmiş dəyişikliklər var, Çıxmaq istədiyinizə əminsinizmi?"
......@@ -1481,7 +1481,7 @@ msgstr "Souhrny"
#: weblate/html/translate.html:213 weblate/html/translate.html.py:310
#: weblate/html/translation.html:42 weblate/html/translation.html.py:59
msgid "Search"
msgstr "Hledat"
msgstr "Vyhledávání"
#: weblate/html/index.html:74
msgid "Most active translators"
......
......@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2014-05-06 13:05+0200\n"
"PO-Revision-Date: 2014-06-02 12:53+0200\n"
"Last-Translator: Denny Sandner <dennysandner@googlemail.com>\n"
"PO-Revision-Date: 2014-06-26 21:04+0200\n"
"Last-Translator: stephan75aa540d4a6b864bfb <stephan.r@web.de>\n"
"Language-Team: German <https://l10n.cihar.com/projects/weblate/master/de/>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
......@@ -699,7 +699,7 @@ msgstr "Glossar exportieren"
#: weblate/html/subproject.html:34 weblate/html/translate.html:205
#: weblate/html/translation.html:41 weblate/html/translation.html.py:94
msgid "History"
msgstr "Geschichte"
msgstr "Verlauf"
#: weblate/html/dictionary.html:90 weblate/html/translate.html:264
#: weblate/html/translate.html.py:298
......@@ -2970,12 +2970,12 @@ msgstr "Repository-Status:"
#: weblate/html/mail/merge_failure_subject.txt:1
#, python-format
msgid "Merge failure in %(subproject)s"
msgstr ""
msgstr "Fehler beim Zusammenführen in %(subproject)s"
#: weblate/html/mail/new_comment.html:12 weblate/html/mail/new_comment.txt:3
#, fuzzy, python-format
#, python-format
msgid "there has been a new comment on %(subproject)s at %(site_title)s."
msgstr "Automatische Übersetzung"
msgstr "Es gibt einen neuen Kommentar über %(subproject)s bei %(site_title)s."
#: weblate/html/mail/new_comment.html:29 weblate/html/mail/new_comment.txt:9
msgid "Comment:"
......@@ -2984,7 +2984,7 @@ msgstr "Kommentar:"
#: weblate/html/mail/new_comment_subject.txt:1
#, python-format
msgid "New comment in %(subproject)s"
msgstr ""
msgstr "Neuer Kommentar bei %(subproject)s"
#: weblate/html/mail/new_contributor.html:12
#: weblate/html/mail/new_contributor.txt:3
......@@ -3072,7 +3072,7 @@ msgstr "Neue Übersetzung in %(translation)s"
#: weblate/html/mail/signature.txt:4
msgid "More information about Weblate can be found at http://weblate.org/"
msgstr ""
msgstr "Weitere Informationen zu Weblate finden sich unter http://weblate.org"
#: weblate/html/trans/change_list.html:7
msgid "changes"
......@@ -3432,6 +3432,7 @@ msgstr "Verbindung zu einem verbundenen Repository nicht möglich!"
#: weblate/trans/validators.py:96
msgid "Invalid link to Weblate project, use weblate://project/subproject."
msgstr ""
"Ungültiger Link zum Weblate-Projekt. Muster: weblate://project/subproject"
#: weblate/trans/validators.py:108
msgid ""
......@@ -3705,11 +3706,11 @@ msgstr "Unterstütze Weblate mittels GitTip"
#: weblate/trans/models/advertisement.py:94
msgid "Mail footer (text)"
msgstr ""
msgstr "Email-Fußzeile (Text)"
#: weblate/trans/models/advertisement.py:95
msgid "Mail footer (HTML)"
msgstr ""
msgstr "Email-Fußzeile (HTML)"
#: weblate/trans/models/advertisement.py:100
#| msgid "Papiamento"
......@@ -3852,7 +3853,7 @@ msgstr "Übersetzungslizenz"
#: weblate/trans/models/project.py:107
msgid "Optional short summary of license used for translations."
msgstr ""
msgstr "Optionale Kurz-Nennung der Lizenz für Übersetzungen."
#: weblate/trans/models/project.py:111
msgid "License URL"
......@@ -3860,7 +3861,7 @@ msgstr "URL der Lizenz"
#: weblate/trans/models/project.py:113
msgid "Optional URL with license details."
msgstr ""
msgstr "Optionale URL mit Details zur Lizenz."
#: weblate/trans/models/project.py:116
msgid "New language"
......@@ -3952,6 +3953,7 @@ msgstr ""
#: weblate/trans/models/project.py:228
msgid "License URL can not be used without license summary."
msgstr ""
"Die Lizenz-URL kann nicht ohne die Kurz-Nennung der Lizenz verwendet werden."
#: weblate/trans/models/project.py:234
#, python-format
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2014-05-06 13:05+0200\n"
"PO-Revision-Date: 2014-06-01 19:12+0200\n"
"PO-Revision-Date: 2014-06-13 07:22+0200\n"
"Last-Translator: ks k <kmshts@gmail.com>\n"
"Language-Team: Korean "
"<https://l10n.cihar.com/projects/weblate/javascript/ko/>\n"
......@@ -76,7 +76,7 @@ msgstr "취소"
#: weblate/media/loader.js:495
msgid "There are some unsaved changes, are you sure you want to leave?"
msgstr "약간의 저장되지 않은 변경 사항이 있습니다 당신은 당신이 떠날 하시겠습니까?"
msgstr "일부 저장되지 않은 변경 사항이 있습니다. 종료 하시겠습니까?"
#~ msgid "Failed translation"
#~ msgstr "번역 실패"
......
This diff is collapsed.
This diff is collapsed.
......@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2014-05-06 13:05+0200\n"
"PO-Revision-Date: 2014-02-14 01:35+0200\n"
"Last-Translator: Huang Zhiyi <hzy980512@126.com>\n"
"Language-Team: Simplified Chinese <http://l10n.cihar.com/projects/weblate/"
"javascript/zh_CN/>\n"
"PO-Revision-Date: 2014-06-24 03:09+0200\n"
"Last-Translator: shanyan baishui <Siramizu@gmail.com>\n"
"Language-Team: Simplified Chinese "
"<https://l10n.cihar.com/projects/weblate/javascript/zh_CN/>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 1.9-dev\n"
"X-Generator: Weblate 1.10-dev\n"
#. Translators: Verb for copy operation
#: weblate/media/loader.js:78
......@@ -76,7 +76,7 @@ msgstr "取消"
#: weblate/media/loader.js:495
msgid "There are some unsaved changes, are you sure you want to leave?"
msgstr "您有未保存的更改,确定要离开么?"
msgstr "您的修改尚未保存,确定要离开吗?"
#~ msgid "Failed translation"
#~ msgstr "翻译失败"
......
......@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Weblate 1.2\n"
"Report-Msgid-Bugs-To: weblate@lists.cihar.com\n"
"POT-Creation-Date: 2014-05-06 13:05+0200\n"
"PO-Revision-Date: 2014-05-09 19:56+0200\n"
"PO-Revision-Date: 2014-06-15 01:57+0200\n"
"Last-Translator: ezjerry liao <ezjerry@gmail.com>\n"
"Language-Team: Traditional Chinese "
"<https://l10n.cihar.com/projects/weblate/master/zh_TW/>\n"
......@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 1.9\n"
"X-Generator: Weblate 1.10-dev\n"
#: weblate/accounts/avatar.py:148
msgctxt "No known user"
......@@ -4204,7 +4204,7 @@ msgstr "1 個月前"
#, python-format
msgid "%(count)s month ago"
msgid_plural "%(count)s months ago"
msgstr[0] "%(count)s 月前"
msgstr[0] "%(count)s 月前"
#: weblate/trans/templatetags/translations.py:334
#, python-format
......
-r requirements.txt
PyICU
pyLibravatar
pydns
\ No newline at end of file
Django>=1.5
GitPython>=0.3.2.RC1
South>=0.7
South>=0.7.5
Whoosh>=2.5.2
Translate-Toolkit>=1.10.0
lxml>=3.1.0
......
#!/bin/sh
# Migration ordering testing
set -e
set -x
for app in trans lang accounts ; do
rm -f weblate.db
./manage.py syncdb --noinput --settings weblate.settings_test
./manage.py migrate --settings weblate.settings_test --traceback $app
done
......@@ -2,4 +2,4 @@ pep8
coveralls
pylint
selenium
httpretty
httpretty!=0.8.1
......@@ -23,6 +23,10 @@ from south.v2 import SchemaMigration
class Migration(SchemaMigration):
depends_on = (
('lang', '0003_auto__add_field_language_plural_type'),
)
def forwards(self, orm):
# Adding field 'Profile.subscribe_new_language'
db.add_column(u'accounts_profile', 'subscribe_new_language',
......
......@@ -22,6 +22,10 @@ from south.v2 import DataMigration
class Migration(DataMigration):
depends_on = (
('lang', '0003_auto__add_field_language_plural_type'),
)
def forwards(self, orm):
'''
Merges first and last name into one field.
......
......@@ -78,6 +78,7 @@ TIME_ZONE = 'Europe/Prague'
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
('az', u'Azərbaycan'),
('be', u'Беларуская'),
('br', u'Brezhoneg'),
('ca', u'Català'),
......
......@@ -555,6 +555,17 @@ class FileFormat(object):
'''
return True
@staticmethod
def get_language_filename(path, mask, code):
"""
Return full filename of a language file for given
path, filemaks and language code.
"""
return os.path.join(
path,
mask.replace('*', code)
)
@staticmethod
def add_language(filename, code, base):
'''
......@@ -747,6 +758,17 @@ class AndroidFormat(FileFormat):
'''
return True
@staticmethod
def get_language_filename(path, mask, code):
"""
Return full filename of a language file for given
path, filemaks and language code.
"""
return os.path.join(
path,
mask.replace('*', code.replace('_', '-r'))
)
@staticmethod
def add_language(filename, code, base):
'''
......
......@@ -23,6 +23,10 @@ from south.v2 import SchemaMigration
class Migration(SchemaMigration):
depends_on = (
('lang', '0002_auto__add_field_language_direction'),
)
def forwards(self, orm):
# Changing field 'Check.language'
......
......@@ -1192,9 +1192,10 @@ class SubProject(models.Model, PercentMixin, URLMixin, PathMixin):
if not self.file_format_cls.is_valid_base_for_new(base_filename):
raise ValueError('Not supported operation!')
filename = os.path.join(
filename = self.file_format_cls.get_language_filename(
self.get_path(),
self.filemask.replace('*', language.code)
self.filemask,
language.code
)
# Create directory for a translation
......
......@@ -40,6 +40,8 @@ class AutoFormatTest(TestCase):
EXT = 'po'
COUNT = 5
MATCH = 'msgid_plural'
MASK = 'po/*.po'
EXPECTED_PATH = '/path/po/cs_CZ.po'
def test_parse(self):
storage = self.FORMAT(self.FILE)
......@@ -65,6 +67,14 @@ class AutoFormatTest(TestCase):
self.assertTrue(self.MATCH in data)
out.close()
def test_get_language_filename(self):
self.assertEquals(
self.FORMAT.get_language_filename(
'/path', self.MASK, 'cs_CZ'
),
self.EXPECTED_PATH
)
class PoFormatTest(AutoFormatTest):
FORMAT = PoFormat
......@@ -77,3 +87,5 @@ class AndroidFormatTest(AutoFormatTest):
EXT = 'xml'
COUNT = 0
MATCH = '<resources></resources>'
MASK = 'res/values-*/strings.xml'
EXPECTED_PATH = '/path/res/values-cs-rCZ/strings.xml'
......@@ -142,6 +142,25 @@ def show_check_project(request, name, project):
).annotate(count=Count('id'))
units |= res
counts = {}
for unit in units:
key = '{0}/{1}'.format(
unit['translation__subproject__project__slug'],
unit['translation__subproject__slug']
)
if key in counts:
counts[key] += unit['count']
else:
counts[key] = unit['count']
units = [
{
'translation__subproject__slug': key.split('/')[1],
'translation__subproject__project__slug': key.split('/')[0],
'count': counts[key]
} for key in counts
]
return render(
request,
'check_project.html',
......@@ -212,6 +231,21 @@ def show_check_subproject(request, name, project, subproject):
if res > 0:
source_checks.append(res)
counts = {}
for unit in units:
key = unit['translation__language__code']
if key in counts:
counts[key] += unit['count']
else:
counts[key] = unit['count']
units = [
{
'translation__language__code': key,
'count': counts[key]
} for key in counts
]
return render(
request,
'check_subproject.html',
......
......@@ -181,11 +181,14 @@ def search(translation, request):
# Remove old search results
cleanup_session(request.session)
if name is not None:
name = unicode(name)
# Store in cache and return
search_id = str(uuid.uuid1())
search_result = {
'query': search_query,
'name': unicode(name),
'name': name,
'ids': unit_ids,
'search_id': search_id,
'ttl': int(time.time()) + 86400,
......
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