Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Right-click on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(44) |
Feb
(105) |
Mar
(180) |
Apr
(102) |
May
(206) |
Jun
(115) |
Jul
(181) |
Aug
(290) |
Sep
(26) |
Oct
(316) |
Nov
(175) |
Dec
(151) |
2005 |
Jan
(102) |
Feb
(68) |
Mar
(112) |
Apr
(115) |
May
(125) |
Jun
(75) |
Jul
(40) |
Aug
(33) |
Sep
(29) |
Oct
(39) |
Nov
(58) |
Dec
(65) |
2006 |
Jan
(104) |
Feb
(220) |
Mar
(207) |
Apr
(168) |
May
(203) |
Jun
(501) |
Jul
(201) |
Aug
(371) |
Sep
(123) |
Oct
(177) |
Nov
(210) |
Dec
(299) |
2007 |
Jan
(226) |
Feb
(303) |
Mar
(131) |
Apr
(208) |
May
(186) |
Jun
(304) |
Jul
(185) |
Aug
(186) |
Sep
(228) |
Oct
(66) |
Nov
(46) |
Dec
(45) |
2008 |
Jan
(191) |
Feb
(77) |
Mar
(59) |
Apr
(199) |
May
(174) |
Jun
(199) |
Jul
(265) |
Aug
(283) |
Sep
(315) |
Oct
(283) |
Nov
(170) |
Dec
(471) |
2009 |
Jan
(572) |
Feb
(232) |
Mar
(455) |
Apr
(208) |
May
(284) |
Jun
(536) |
Jul
(353) |
Aug
(126) |
Sep
(78) |
Oct
(431) |
Nov
(643) |
Dec
(162) |
2010 |
Jan
(140) |
Feb
(141) |
Mar
(257) |
Apr
(296) |
May
(274) |
Jun
(145) |
Jul
(403) |
Aug
(448) |
Sep
(245) |
Oct
(435) |
Nov
(398) |
Dec
(254) |
2011 |
Jan
(224) |
Feb
(27) |
Mar
(44) |
Apr
(70) |
May
(104) |
Jun
(63) |
Jul
(32) |
Aug
(97) |
Sep
(147) |
Oct
(74) |
Nov
(26) |
Dec
(13) |
2012 |
Jan
(34) |
Feb
(58) |
Mar
(102) |
Apr
(99) |
May
(43) |
Jun
(53) |
Jul
(49) |
Aug
(38) |
Sep
(72) |
Oct
(144) |
Nov
(72) |
Dec
(76) |
2013 |
Jan
(7) |
Feb
(44) |
Mar
(117) |
Apr
(104) |
May
(159) |
Jun
(70) |
Jul
(42) |
Aug
(36) |
Sep
(48) |
Oct
(53) |
Nov
(167) |
Dec
(56) |
2014 |
Jan
(97) |
Feb
(179) |
Mar
(121) |
Apr
(77) |
May
(65) |
Jun
(74) |
Jul
(95) |
Aug
(40) |
Sep
(39) |
Oct
(111) |
Nov
(73) |
Dec
(12) |
2015 |
Jan
(4) |
Feb
(1) |
Mar
(11) |
Apr
(13) |
May
(39) |
Jun
(5) |
Jul
(1) |
Aug
(53) |
Sep
(25) |
Oct
(3) |
Nov
|
Dec
(2) |
2016 |
Jan
(4) |
Feb
(30) |
Mar
(77) |
Apr
(14) |
May
(26) |
Jun
(9) |
Jul
(16) |
Aug
(40) |
Sep
(12) |
Oct
(34) |
Nov
(20) |
Dec
(24) |
2017 |
Jan
(68) |
Feb
(13) |
Mar
(33) |
Apr
(20) |
May
(18) |
Jun
(49) |
Jul
(13) |
Aug
(18) |
Sep
(41) |
Oct
(4) |
Nov
(52) |
Dec
(7) |
2018 |
Jan
(10) |
Feb
(19) |
Mar
(9) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
|
1
(5) |
2
|
3
(16) |
4
(16) |
5
(11) |
6
(3) |
7
(10) |
8
(5) |
9
|
10
|
11
(6) |
12
(11) |
13
(6) |
14
(19) |
15
(15) |
16
(2) |
17
(1) |
18
(7) |
19
(40) |
20
(22) |
21
(20) |
22
(8) |
23
(2) |
24
|
25
(14) |
26
(16) |
27
(21) |
28
(6) |
29
|
30
(1) |
31
|
|
|
|
|
|
|
From: <clouserw@us...> - 2008-08-30 01:38:37
|
Revision: 8228 http://translate.svn.sourceforge.net/translate/?rev=8228&view=rev Author: clouserw Date: 2008-08-30 01:38:47 +0000 (Sat, 30 Aug 2008) Log Message: ----------- Only redirect to our /$lang/ URL format for localized files. Ignore images/css/js/etc. Modified Paths: -------------- src/branches/mozootle/pootle.py Modified: src/branches/mozootle/pootle.py =================================================================== --- src/branches/mozootle/pootle.py 2008-08-28 22:34:57 UTC (rev 8227) +++ src/branches/mozootle/pootle.py 2008-08-30 01:38:47 UTC (rev 8228) @@ -303,20 +303,21 @@ if dashpos >= 0: lonelang = top[:dashpos] - if not self.potree.haslanguage(lang) and not self.potree.haslanguage(lonelang): - sessionlang = self.getuserlanguage(session) - session.setlanguage(sessionlang) - url = self.instance.baseurl+sessionlang+"/"+"/".join(pathwords)+session.getsuffix - return server.Redirect(url) - elif self.potree.haslanguage(lang): - session.setlanguage(lang) - session.localizedurl = self.instance.baseurl+lang+"/" - else: #Must have lonelang - session.setlanguage(lonelang) - url = self.instance.baseurl+lonelang+"/"+"/".join(pathwords[1:])+session.getsuffix - return server.Redirect(url) + # Don't redirect to localized versions for non-localized file types + if not re.search('(css|js|png|jpg|gif)$', "".join(pathwords[-1:])): + if not self.potree.haslanguage(lang) and not self.potree.haslanguage(lonelang): + sessionlang = self.getuserlanguage(session) + session.setlanguage(sessionlang) + url = self.instance.baseurl+sessionlang+"/"+"/".join(pathwords)+session.getsuffix + return server.Redirect(url) + elif self.potree.haslanguage(lang): + session.setlanguage(lang) + session.localizedurl = self.instance.baseurl+lang+"/" + else: #Must have lonelang + session.setlanguage(lonelang) + url = self.instance.baseurl+lonelang+"/"+"/".join(pathwords[1:])+session.getsuffix + return server.Redirect(url) - pathwords = pathwords[1:] if pathwords: top = pathwords[0] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <clouserw@us...> - 2008-08-28 22:34:46
|
Revision: 8227 http://translate.svn.sourceforge.net/translate/?rev=8227&view=rev Author: clouserw Date: 2008-08-28 22:34:57 +0000 (Thu, 28 Aug 2008) Log Message: ----------- Don't require projects to utilize the hooks. This should make us backwards compatible with how pootle currently works. Modified Paths: -------------- src/branches/mozootle/projects.py src/branches/mozootle/scripts/hooks.py Modified: src/branches/mozootle/projects.py =================================================================== --- src/branches/mozootle/projects.py 2008-08-28 22:21:07 UTC (rev 8226) +++ src/branches/mozootle/projects.py 2008-08-28 22:34:57 UTC (rev 8227) @@ -616,7 +616,13 @@ author=session.username fulldir = os.path.split(pathname)[0] - filestocommit = hooks.hook(self.projectcode, "precommit", pathname, author=author, message=message) + try: + filestocommit = hooks.hook(self.projectcode, "precommit", pathname, author=author, message=message) + except ImportError: + # Failed to import the hook - we're going to assume there just isn't a hook to + # import. That means we'll commit the original file. + filestocommit = [pathname] + success = True try: for file in filestocommit: @@ -624,7 +630,10 @@ except Exception, e: print "Failed to commit files: %s" % e success = False - hooks.hook(self.projectcode, "postcommit", pathname, success=success) + try: + hooks.hook(self.projectcode, "postcommit", pathname, success=success) + except: + pass def initialize(self, session, languagecode): try: Modified: src/branches/mozootle/scripts/hooks.py =================================================================== --- src/branches/mozootle/scripts/hooks.py 2008-08-28 22:21:07 UTC (rev 8226) +++ src/branches/mozootle/scripts/hooks.py 2008-08-28 22:34:57 UTC (rev 8227) @@ -27,8 +27,7 @@ return getattr(activehook, hooktype)(file, *args, **kwargs) else: return [] - except ImportError: - print "Failed to import hook (%s)" % project - pass + except ImportError, e: + raise ImportError(e) except Exception, e: print "Exception in project (%s) hook (%s) for file (%s): %s" % (project, hooktype, file, e) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <clouserw@us...> - 2008-08-28 22:20:56
|
Revision: 8226 http://translate.svn.sourceforge.net/translate/?rev=8226&view=rev Author: clouserw Date: 2008-08-28 22:21:07 +0000 (Thu, 28 Aug 2008) Log Message: ----------- return an empty set if no ignored files Modified Paths: -------------- src/branches/mozootle/potree.py Modified: src/branches/mozootle/potree.py =================================================================== --- src/branches/mozootle/potree.py 2008-08-28 16:11:19 UTC (rev 8225) +++ src/branches/mozootle/potree.py 2008-08-28 22:21:07 UTC (rev 8226) @@ -388,7 +388,7 @@ ignoredfiles = getattr(projectprefs, "ignoredfiles", projectcode) if len(ignoredfiles) > 0: return set(ignoredfiles.split(',')) - return [] + return set([]) def getprojectcreatemofiles(self, projectcode): """returns whether the project builds MO files""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <friedelwolff@us...> - 2008-08-28 16:11:08
|
Revision: 8225 http://translate.svn.sourceforge.net/translate/?rev=8225&view=rev Author: friedelwolff Date: 2008-08-28 16:11:19 +0000 (Thu, 28 Aug 2008) Log Message: ----------- Ensure that there is still some source string left after self.flatten(). If there is nothing left (for a string such as '...' we probably want to ignore it anyway. Modified Paths: -------------- src/trunk/translate/tools/poconflicts.py Modified: src/trunk/translate/tools/poconflicts.py =================================================================== --- src/trunk/translate/tools/poconflicts.py 2008-08-28 10:02:54 UTC (rev 8224) +++ src/trunk/translate/tools/poconflicts.py 2008-08-28 16:11:19 UTC (rev 8225) @@ -146,12 +146,13 @@ """work out which strings are conflicting""" self.conflictmap = {} for source, translations in self.textmap.iteritems(): + source = self.flatten(source, " ") if len(source) <= 1: continue if len(translations) > 1: uniquetranslations = dict.fromkeys([target for target, unit, filename in translations]) if len(uniquetranslations) > 1: - self.conflictmap[self.flatten(source, " ")] = translations + self.conflictmap[source] = translations def outputconflicts(self, options): """saves the result of the conflict match""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-28 10:02:48
|
Revision: 8224 http://translate.svn.sourceforge.net/translate/?rev=8224&view=rev Author: dwaynebailey Date: 2008-08-28 10:02:54 +0000 (Thu, 28 Aug 2008) Log Message: ----------- Add British English 'translations' Added Paths: ----------- src/trunk/Pootle/po/pootle/en_GB/ src/trunk/Pootle/po/pootle/en_GB/jToolkit.po src/trunk/Pootle/po/pootle/en_GB/pootle.po Added: src/trunk/Pootle/po/pootle/en_GB/jToolkit.po =================================================================== --- src/trunk/Pootle/po/pootle/en_GB/jToolkit.po (rev 0) +++ src/trunk/Pootle/po/pootle/en_GB/jToolkit.po 2008-08-28 10:02:54 UTC (rev 8224) @@ -0,0 +1,142 @@ +# British English 'translations' for jToolkit +# Copyright (C) 2008 St James Software +# This file is distributed under the same license as the jToolkit package. +# Dwayne Bailey <dwayne@...>, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: jToolkit 0.7.8\n" +"POT-Creation-Date: 2005-06-13 14:54-0500\n" +"PO-Revision-Date: 2008-08-28 11:29+0200\n" +"Last-Translator: Dwayne Bailey <dwayne@...>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: web/server.py:57 +#, python-format +msgid "Login for %s" +msgstr "Login for %s" + +#: web/server.py:91 +msgid "Cancel this action and start a new session" +msgstr "Cancel this action and start a new session" + +#: web/server.py:92 +msgid "Instead of confirming this action, log out and start from scratch" +msgstr "Instead of confirming this action, log out and start from scratch" + +#: web/server.py:97 +msgid "Exit application" +msgstr "Exit application" + +#: web/server.py:98 +msgid "Exit this application and return to the parent application" +msgstr "Exit this application and return to the parent application" + +#: web/server.py:105 +msgid ", please confirm login" +msgstr ", please confirm login" + +#: web/server.py:110 +msgid "Login" +msgstr "Login" + +#: web/server.py:123 +msgid "Username:" +msgstr "Username:" + +#: web/server.py:125 +msgid "Password:" +msgstr "Password:" + +#: web/server.py:130 +msgid "Language:" +msgstr "Language:" + +#: web/server.py:551 web/server.py:642 +msgid "Select Application" +msgstr "Select Application" + +#: web/server.py:637 +msgid "Logout" +msgstr "Logout" + +#: web/server.py:639 +msgid "Exit" +msgstr "Exit" + +#: web/session.py:191 web/session.py:344 web/session.py:350 +#, python-format +msgid "logged in as <b>%s</b>" +msgstr "logged in as <b>%s</b>" + +#: web/session.py:193 +msgid "couldn't add new session" +msgstr "couldn't add new session" + +#: web/session.py:214 +msgid "logged out" +msgstr "logged out" + +#: web/session.py:234 +msgid "connected" +msgstr "connected" + +#: web/session.py:269 +msgid "exited parent session" +msgstr "exited parent session" + +#: web/session.py:314 +msgid "need to define the users or userprefs entry on the server config" +msgstr "need to define the users or userprefs entry on the server config" + +#: web/session.py:321 web/session.py:453 +#, python-format +msgid "user does not exist (%r)" +msgstr "user does not exist (%r)" + +#: web/session.py:362 +msgid "invalid username and/or password" +msgstr "invalid username and/or password" + +#: web/session.py:433 web/session.py:437 +msgid "failed login confirmation" +msgstr "failed login confirmation" + +#: widgets/form.py:79 widgets/thumbgallery.py:292 +msgid "No" +msgstr "No" + +#: widgets/form.py:80 widgets/thumbgallery.py:293 +msgid "Yes" +msgstr "Yes" + +#: widgets/thumbgallery.py:233 attachments.py:348 +msgid "remove" +msgstr "remove" + +#: widgets/thumbgallery.py:289 attachments.py:322 +msgid "(no attachment)" +msgstr "(no attachment)" + +#: attachments.py:70 +msgid "attachment is too large" +msgstr "attachment is too large" + +#: attachments.py:349 +msgid "remove this attachment" +msgstr "remove this attachment" + +#: attachments.py:350 +msgid "restore" +msgstr "restore" + +#: attachments.py:351 +msgid "this attachment has been removed. click here to restore it" +msgstr "this attachment has been removed. click here to restore it" + +#: attachments.py:362 +msgid "attach a file" +msgstr "attach a file" Added: src/trunk/Pootle/po/pootle/en_GB/pootle.po =================================================================== --- src/trunk/Pootle/po/pootle/en_GB/pootle.po (rev 0) +++ src/trunk/Pootle/po/pootle/en_GB/pootle.po 2008-08-28 10:02:54 UTC (rev 8224) @@ -0,0 +1,1388 @@ +# British English 'translations' of Pootle. +# Copyright (C) 2008 Zuza Software Foundation (Translate.org.za) +# This file is distributed under the same license as the Pootle package. +# Dwayne Bailey <dwayne@...>, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: Pootle 1.1.0\n" +"Report-Msgid-Bugs-To: translate-pootle@...\n" +"POT-Creation-Date: 2008-08-19 12:36+0200\n" +"PO-Revision-Date: 2008-08-28 11:29+0200\n" +"Last-Translator: Dwayne Bailey <dwayne@...>\n" +"Language-Team: \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" + +#: adminpages.py:37 adminpages.py:76 adminpages.py:135 adminpages.py:201 +#: adminpages.py:292 adminpages.py:359 indexpage.py:70 indexpage.py:95 +#: indexpage.py:139 indexpage.py:201 indexpage.py:264 indexpage.py:352 +#: pagelayout.py:74 translatepage.py:108 users.py:63 users.py:118 users.py:154 +#: users.py:177 +msgid "Pootle Demo" +msgstr "Pootle Demo" + +#: adminpages.py:45 adminpages.py:85 adminpages.py:144 adminpages.py:210 +#: pagelayout.py:27 +msgid "Home" +msgstr "Home" + +#: adminpages.py:46 adminpages.py:212 +msgid "Users" +msgstr "Users" + +#: adminpages.py:47 adminpages.py:87 indexpage.py:93 +msgid "Languages" +msgstr "Languages" + +#: adminpages.py:48 adminpages.py:146 indexpage.py:94 +msgid "Projects" +msgstr "Projects" + +#: adminpages.py:49 +msgid "General options" +msgstr "General options" + +#: adminpages.py:50 users.py:182 +msgid "Option" +msgstr "Option" + +#: adminpages.py:51 users.py:183 +msgid "Current value" +msgstr "Current value" + +#: adminpages.py:52 adminpages.py:88 adminpages.py:147 adminpages.py:213 +#: users.py:197 +msgid "Save changes" +msgstr "Save changes" + +#: adminpages.py:56 +msgid "Title" +msgstr "Title" + +#: adminpages.py:57 +msgid "Description" +msgstr "Description" + +#: adminpages.py:58 +msgid "Base URL" +msgstr "Base URL" + +#: adminpages.py:59 +msgid "Home Page" +msgstr "Home Page" + +#: adminpages.py:77 +msgid "Pootle Languages Admin Page" +msgstr "Pootle Languages Admin Page" + +#: adminpages.py:86 adminpages.py:145 adminpages.py:211 +msgid "Main admin page" +msgstr "Main admin page" + +#: adminpages.py:92 adminpages.py:286 +msgid "ISO Code" +msgstr "ISO Code" + +#: adminpages.py:93 adminpages.py:152 adminpages.py:218 adminpages.py:287 +#: users.py:127 +msgid "Full Name" +msgstr "Full Name" + +#: adminpages.py:94 +msgid "(add language here)" +msgstr "(add language here)" + +#: adminpages.py:95 +msgid "Special Chars" +msgstr "Special Chars" + +#: adminpages.py:95 +msgid "(special characters)" +msgstr "(special characters)" + +#: adminpages.py:96 indexpage.py:224 +msgid "Number of Plurals" +msgstr "Number of Plurals" + +#: adminpages.py:96 +msgid "(number of plurals)" +msgstr "(number of plurals)" + +#: adminpages.py:97 indexpage.py:225 +msgid "Plural Equation" +msgstr "Plural Equation" + +#: adminpages.py:97 +msgid "(plural equation)" +msgstr "(plural equation)" + +#: adminpages.py:98 +msgid "Remove Language" +msgstr "Remove Language" + +#. l10n: The parameter is a languagecode, projectcode or username +#: adminpages.py:113 adminpages.py:181 adminpages.py:245 adminpages.py:425 +#, python-format +msgid "Remove %s" +msgstr "Remove %s" + +#: adminpages.py:132 +msgid "Standard" +msgstr "Standard" + +#: adminpages.py:136 +msgid "Pootle Projects Admin Page" +msgstr "Pootle Projects Admin Page" + +#: adminpages.py:151 +msgid "Project Code" +msgstr "Project Code" + +#: adminpages.py:153 +msgid "(add project here)" +msgstr "(add project here)" + +#: adminpages.py:154 +msgid "Project Description" +msgstr "Project Description" + +#: adminpages.py:154 +msgid "(project description)" +msgstr "(project description)" + +#: adminpages.py:155 +msgid "Checker Style" +msgstr "Checker Style" + +#: adminpages.py:156 +msgid "File Type" +msgstr "File Type" + +#: adminpages.py:157 +msgid "Create MO Files" +msgstr "Create MO Files" + +#: adminpages.py:158 +msgid "Remove Project" +msgstr "Remove Project" + +#: adminpages.py:202 +msgid "Pootle User Admin Page" +msgstr "Pootle User Admin Page" + +#: adminpages.py:217 adminpages.py:376 users.py:121 users.py:157 +msgid "Username" +msgstr "Username" + +#: adminpages.py:219 users.py:403 +msgid "(add full name here)" +msgstr "(add full name here)" + +#: adminpages.py:220 users.py:124 +msgid "Email Address" +msgstr "Email Address" + +#: adminpages.py:220 users.py:406 +msgid "(add email here)" +msgstr "(add email here)" + +#: adminpages.py:221 users.py:130 users.py:188 +msgid "Password" +msgstr "Password" + +#: adminpages.py:221 users.py:400 +msgid "(add password here)" +msgstr "(add password here)" + +#: adminpages.py:222 +msgid "Activated" +msgstr "Activated" + +#: adminpages.py:222 +msgid "Activate New User" +msgstr "Activate New User" + +#: adminpages.py:223 +msgid "Remove User" +msgstr "Remove User" + +#: adminpages.py:278 +msgid "Back to main page" +msgstr "Back to main page" + +#: adminpages.py:279 +msgid "Existing languages" +msgstr "Existing languages" + +#. l10n: This refers to updating the translation files from the templates like with .pot files +#: adminpages.py:283 +msgid "Update Languages" +msgstr "Update Languages" + +#: adminpages.py:284 +#, python-format +msgid "Pootle Admin: %s" +msgstr "Pootle Admin: %s" + +#: adminpages.py:285 adminpages.py:356 +msgid "You do not have the rights to administer this project." +msgstr "You do not have the rights to administer this project." + +#. l10n: This refers to updating the translation files from the templates like with .pot files +#: adminpages.py:289 +msgid "Update from templates" +msgstr "Update from templates" + +#: adminpages.py:298 +msgid "Add Language" +msgstr "Add Language" + +#. l10n: This is the page title. The first parameter is the language name, the second parameter is the project name +#: adminpages.py:336 +#, python-format +msgid "Pootle Admin: %s %s" +msgstr "Pootle Admin: %s %s" + +#: adminpages.py:337 +msgid "Project home page" +msgstr "Project home page" + +#: adminpages.py:355 +#, python-format +msgid "Cannot set rights for username %s - user does not exist" +msgstr "Cannot set rights for username %s - user does not exist" + +#: adminpages.py:372 +msgid "This is a GNU-style project (one directory, files named per language)." +msgstr "This is a GNU-style project (one directory, files named per language)." + +#: adminpages.py:374 +msgid "This is a standard style project (one directory per language)." +msgstr "This is a standard style project (one directory per language)." + +#: adminpages.py:375 +msgid "User Permissions" +msgstr "User Permissions" + +#: adminpages.py:377 +msgid "(select to add user)" +msgstr "(select to add user)" + +#: adminpages.py:378 +msgid "Rights" +msgstr "Rights" + +#: adminpages.py:379 indexpage.py:1008 +msgid "Remove" +msgstr "Remove" + +#: adminpages.py:406 +msgid "Update Rights" +msgstr "Update Rights" + +#: indexpage.py:58 +msgid "About Pootle" +msgstr "About Pootle" + +#. l10n: Take care to use HTML tags correctly. A markup error could cause a display error. +#: indexpage.py:60 +msgid "" +"<strong>Pootle</strong> is a simple web portal that should allow you to " +"<strong>translate</strong>! Since Pootle is <strong>Free Software</strong>, " +"you can download it and run your own copy if you like. You can also help " +"participate in the development in many ways (you don't have to be able to " +"program)." +msgstr "" +"<strong>Pootle</strong> is a simple web portal that should allow you to " +"<strong>translate</strong>! Since Pootle is <strong>Free Software</strong>, " +"you can download it and run your own copy if you like. You can also help " +"participate in the development in many ways (you don't have to be able to " +"program)." + +#: indexpage.py:61 +msgid "" +"The Pootle project itself is hosted at <a href=\"http://translate."; +"sourceforge.net/\">translate.sourceforge.net</a> where you can find the " +"details about source code, mailing lists etc." +msgstr "" +"The Pootle project itself is hosted at <a href=\"http://translate."; +"sourceforge.net/\">translate.sourceforge.net</a> where you can find the " +"details about source code, mailing lists etc." + +#. l10n: If your language uses right-to-left layout and you leave the English untranslated, consider enclosing the necessary text with <span dir="ltr">.......</span> to help browsers to display it correctly. +#. l10n: Take care to use HTML tags correctly. A markup error could cause a display error. +#: indexpage.py:64 +msgid "" +"The name stands for <b>PO</b>-based <b>O</b>nline <b>T</b>ranslation / <b>L</" +"b>ocalization <b>E</b>ngine, but you may need to read <a href=\"http://www."; +"thechestnut.com/flumps.htm\">this</a>." +msgstr "" +"The name stands for <b>PO</b>-based <b>O</b>nline <b>T</b>ranslation / <b>L</" +"b>ocalisation <b>E</b>ngine, but you may need to read <a href=\"http://www."; +"thechestnut.com/flumps.htm\">this</a>." + +#: indexpage.py:65 +msgid "Versions" +msgstr "Versions" + +#. l10n: If your language uses right-to-left layout and you leave the English untranslated, consider enclosing the necessary text with <span dir="ltr">.......</span> to help browsers to display it correctly. +#. l10n: Take care to use HTML tags correctly. A markup error could cause a display error. +#: indexpage.py:68 +#, python-format +msgid "" +"This site is running:<br />Pootle %s<br />Translate Toolkit %s<br />jToolkit " +"%s<br />Kid %s<br />ElementTree %s<br />Python %s (on %s/%s)" +msgstr "" +"This site is running:<br />Pootle %s<br />Translate Toolkit %s<br />jToolkit " +"%s<br />Kid %s<br />ElementTree %s<br />Python %s (on %s/%s)" + +#: indexpage.py:133 +#, python-format +msgid "User Page for: %s" +msgstr "User Page for: %s" + +#: indexpage.py:135 +msgid "Change options" +msgstr "Change options" + +#: indexpage.py:136 +msgid "Admin page" +msgstr "Admin page" + +#: indexpage.py:137 projects.py:149 +msgid "Administrate" +msgstr "Administrate" + +#: indexpage.py:138 +msgid "Quick Links" +msgstr "Quick Links" + +#: indexpage.py:142 +msgid "Please click on 'Change options' and select some languages and projects" +msgstr "" +"Please click on 'Change options' and select some languages and projects" + +#: indexpage.py:199 +#, python-format +msgid "%d project, average %d%% translated" +msgid_plural "%d projects, average %d%% translated" +msgstr[0] "%d project, average %d%% translated" +msgstr[1] "%d projects, average %d%% translated" + +#. l10n: The first parameter is the name of the installation +#. l10n: The second parameter is the name of the project/language +#. l10n: This is used as a page title. Most languages won't need to change this +#: indexpage.py:205 indexpage.py:268 +#, python-format +msgid "%s: %s" +msgstr "%s: %s" + +#: indexpage.py:207 indexpage.py:270 pagelayout.py:31 pagelayout.py:171 +msgid "Admin" +msgstr "Admin" + +#: indexpage.py:221 +msgid "Language Code" +msgstr "Language Code" + +#: indexpage.py:222 +msgid "Language Name" +msgstr "Language Name" + +#: indexpage.py:260 +#, python-format +msgid "%d language, average %d%% translated" +msgid_plural "%d languages, average %d%% translated" +msgstr[0] "%d language, average %d%% translated" +msgstr[1] "%d languages, average %d%% translated" + +#: indexpage.py:273 +msgid "Language" +msgstr "Language" + +#. l10n: The first parameter is the name of the installation (like "Pootle") +#: indexpage.py:354 +#, python-format +msgid "%s: Project %s, Language %s" +msgstr "%s: Project %s, Language %s" + +#. l10n: text next to search field +#: indexpage.py:362 translatepage.py:145 +msgid "Search" +msgstr "Search" + +#: indexpage.py:363 translatepage.py:146 +msgid "Advanced Search" +msgstr "Advanced Search" + +#: indexpage.py:422 +msgid "Cannot upload file, no file attached" +msgstr "Cannot upload file, no file attached" + +#: indexpage.py:428 +msgid "Can only upload PO files and zips of PO files" +msgstr "Can only upload PO files and zips of PO files" + +#: indexpage.py:535 indexpage.py:538 translatepage.py:237 translatepage.py:240 +msgid "Assign Strings" +msgstr "Assign Strings" + +#: indexpage.py:536 translatepage.py:239 +msgid "Assign Action" +msgstr "Assign Action" + +#: indexpage.py:537 translatepage.py:238 +msgid "Assign to User" +msgstr "Assign to User" + +#: indexpage.py:543 +msgid "goals" +msgstr "goals" + +#: indexpage.py:544 +msgid "Enter goal name" +msgstr "Enter goal name" + +#: indexpage.py:545 +msgid "Add Goal" +msgstr "Add Goal" + +#: indexpage.py:550 indexpage.py:552 +msgid "Upload File" +msgstr "Upload File" + +#: indexpage.py:551 +msgid "Select file to upload" +msgstr "Select file to upload" + +#. l10n: radio button text +#: indexpage.py:557 projects.py:141 +msgid "Overwrite" +msgstr "Overwrite" + +#. l10n: tooltip +#: indexpage.py:559 +msgid "Overwrite the current file if it exists" +msgstr "Overwrite the current file if it exists" + +#. l10n: radio button text +#: indexpage.py:561 +msgid "Merge" +msgstr "Merge" + +#. l10n: tooltip +#: indexpage.py:563 +msgid "" +"Merge the file with the current file and turn conflicts into suggestions" +msgstr "" +"Merge the file with the current file and turn conflicts into suggestions" + +#: indexpage.py:666 +msgid "Not in a goal" +msgstr "Not in a goal" + +#: indexpage.py:686 +msgid "Add User" +msgstr "Add User" + +#: indexpage.py:731 +msgid "PO file" +msgstr "PO file" + +#: indexpage.py:735 +msgid "XLIFF file" +msgstr "XLIFF file" + +#: indexpage.py:739 +msgid "Qt .ts file" +msgstr "Qt .ts file" + +#: indexpage.py:743 +msgid "CSV file" +msgstr "CSV file" + +#: indexpage.py:748 +msgid "MO file" +msgstr "MO file" + +#. l10n: Update from version control (like CVS or Subversion) +#: indexpage.py:754 +msgid "Update" +msgstr "Update" + +#. l10n: Commit to version control (like CVS or Subversion) +#: indexpage.py:760 projects.py:150 +msgid "Commit" +msgstr "Commit" + +#: indexpage.py:798 +msgid "All Strings" +msgstr "All Strings" + +#: indexpage.py:799 pagelayout.py:249 +msgid "Untranslated" +msgstr "Untranslated" + +#: indexpage.py:800 +msgid "Unassigned" +msgstr "Unassigned" + +#: indexpage.py:801 +msgid "Unassigned and Untranslated" +msgstr "Unassigned and Untranslated" + +#: indexpage.py:808 +msgid "Set Goal" +msgstr "Set Goal" + +#: indexpage.py:812 +msgid "Select Multiple" +msgstr "Select Multiple" + +#: indexpage.py:814 +msgid "Assign To" +msgstr "Assign To" + +#: indexpage.py:843 +msgid "Show Editing Functions" +msgstr "Show Editing Functions" + +#: indexpage.py:844 +msgid "Show Statistics" +msgstr "Show Statistics" + +#: indexpage.py:845 +msgid "Show Tracks" +msgstr "Show Tracks" + +#: indexpage.py:845 +msgid "Hide Tracks" +msgstr "Hide Tracks" + +#. l10n: "Checks" are quality checks that Pootle performs on translations to test for common mistakes +#: indexpage.py:847 +msgid "Show Checks" +msgstr "Show Checks" + +#: indexpage.py:847 +msgid "Hide Checks" +msgstr "Hide Checks" + +#: indexpage.py:848 +msgid "Show Goals" +msgstr "Show Goals" + +#: indexpage.py:848 +msgid "Hide Goals" +msgstr "Hide Goals" + +#: indexpage.py:849 +msgid "Show Assigns" +msgstr "Show Assigns" + +#: indexpage.py:849 +msgid "Hide Assigns" +msgstr "Hide Assigns" + +#: indexpage.py:858 +#, python-format +msgid "All Goals: %s" +msgstr "All Goals: %s" + +#: indexpage.py:864 +msgid "Translate My Strings" +msgstr "Translate My Strings" + +#: indexpage.py:866 +msgid "View My Strings" +msgstr "View My Strings" + +#: indexpage.py:871 +msgid "No strings assigned to you" +msgstr "No strings assigned to you" + +#: indexpage.py:875 +msgid "Quick Translate My Strings" +msgstr "Quick Translate My Strings" + +#: indexpage.py:879 +msgid "No untranslated strings assigned to you" +msgstr "No untranslated strings assigned to you" + +#: indexpage.py:883 +msgid "Review Suggestions" +msgstr "Review Suggestions" + +#: indexpage.py:885 +msgid "View Suggestions" +msgstr "View Suggestions" + +#: indexpage.py:890 +msgid "Quick Translate" +msgstr "Quick Translate" + +#: indexpage.py:892 +msgid "View Untranslated" +msgstr "View Untranslated" + +#: indexpage.py:896 +msgid "No untranslated items" +msgstr "No untranslated items" + +#: indexpage.py:899 +msgid "Translate All" +msgstr "Translate All" + +#: indexpage.py:914 +msgid "ZIP of goal" +msgstr "ZIP of goal" + +#: indexpage.py:916 +msgid "ZIP of folder" +msgstr "ZIP of folder" + +#: indexpage.py:923 +msgid "Generate SDF" +msgstr "Generate SDF" + +#: indexpage.py:976 +#, python-format +msgid "%d string (%d%%) failed" +msgid_plural "%d strings (%d%%) failed" +msgstr[0] "%d string (%d%%) failed" +msgstr[1] "%d strings (%d%%) failed" + +#: indexpage.py:1003 +#, python-format +msgid "%d/%d words (%d%%) assigned" +msgstr "%d/%d words (%d%%) assigned" + +#: indexpage.py:1004 indexpage.py:1006 +#, python-format +msgid "[%d/%d strings]" +msgstr "[%d/%d strings]" + +#: indexpage.py:1005 pagelayout.py:235 +#, python-format +msgid "%d/%d words (%d%%) translated" +msgstr "%d/%d words (%d%%) translated" + +#: pagelayout.py:28 +msgid "All projects" +msgstr "All projects" + +#: pagelayout.py:29 +msgid "All languages" +msgstr "All languages" + +#: pagelayout.py:30 +msgid "My account" +msgstr "My account" + +#: pagelayout.py:32 +msgid "Docs & help" +msgstr "Docs & help" + +#: pagelayout.py:34 +msgid "Log out" +msgstr "Log out" + +#: pagelayout.py:35 +msgid "Log in" +msgstr "Log in" + +#. l10n: Verb, as in "to register" +#: pagelayout.py:37 +msgid "Register" +msgstr "Register" + +#: pagelayout.py:38 +msgid "Activate" +msgstr "Activate" + +#: pagelayout.py:83 +msgid "Pootle Logo" +msgstr "Pootle Logo" + +#: pagelayout.py:84 +msgid "About this Pootle server" +msgstr "About this Pootle server" + +#: pagelayout.py:160 +msgid "All goals" +msgstr "All goals" + +#: pagelayout.py:231 +#, python-format +msgid "%d/%d files" +msgstr "%d/%d files" + +#: pagelayout.py:234 +#, python-format +msgid "%d file" +msgid_plural "%d files" +msgstr[0] "%d file" +msgstr[1] "%d files" + +#: pagelayout.py:236 +#, python-format +msgid "%d/%d strings" +msgstr "%d/%d strings" + +#: pagelayout.py:242 users.py:184 +msgid "Name" +msgstr "Name" + +#: pagelayout.py:243 +msgid "Translated" +msgstr "Translated" + +#: pagelayout.py:244 +msgid "Translated percentage" +msgstr "Translated percentage" + +#: pagelayout.py:245 +msgid "Translated words" +msgstr "Translated words" + +#: pagelayout.py:246 translatepage.py:135 +msgid "Fuzzy" +msgstr "Fuzzy" + +#: pagelayout.py:247 +msgid "Fuzzy percentage" +msgstr "Fuzzy percentage" + +#: pagelayout.py:248 +msgid "Fuzzy words" +msgstr "Fuzzy words" + +#: pagelayout.py:250 +msgid "Untranslated percentage" +msgstr "Untranslated percentage" + +#: pagelayout.py:251 +msgid "Untranslated words" +msgstr "Untranslated words" + +#: pagelayout.py:252 +msgid "Total" +msgstr "Total" + +#: pagelayout.py:253 +msgid "Total words" +msgstr "Total words" + +#. l10n: noun. The graphical representation of translation status +#: pagelayout.py:255 +msgid "Graph" +msgstr "Graph" + +#: pagelayout.py:293 +msgid "Source Text" +msgstr "Source Text" + +#: pagelayout.py:297 +msgid "Target Text" +msgstr "Target Text" + +#: pagelayout.py:301 +msgid "Comments" +msgstr "Comments" + +#: pagelayout.py:305 +msgid "Locations" +msgstr "Locations" + +#: pootle.py:305 +msgid "Login failed" +msgstr "Login failed" + +#: pootle.py:349 pootle.py:380 +msgid "Redirecting to login..." +msgstr "Redirecting to login..." + +#: pootle.py:352 +msgid "Need to log in to access home page" +msgstr "Need to log in to access home page" + +#: pootle.py:365 +msgid "Personal details updated" +msgstr "Personal details updated" + +#: pootle.py:383 +msgid "Need to log in to access admin page" +msgstr "Need to log in to access admin page" + +#: pootle.py:390 +msgid "Redirecting to home..." +msgstr "Redirecting to home..." + +#: pootle.py:393 +msgid "You do not have the rights to administer pootle." +msgstr "You do not have the rights to administer pootle." + +#. l10n: Verb +#: projects.py:138 +msgid "View" +msgstr "View" + +#: projects.py:139 translatepage.py:678 +msgid "Suggest" +msgstr "Suggest" + +#: projects.py:140 +msgid "Translate" +msgstr "Translate" + +#. l10n: Verb +#: projects.py:143 +msgid "Review" +msgstr "Review" + +#. l10n: Verb +#: projects.py:145 +msgid "Archive" +msgstr "Archive" + +#. l10n: This refers to generating the binary .mo file +#: projects.py:147 +msgid "Compile PO files" +msgstr "Compile PO files" + +#: projects.py:148 +msgid "Assign" +msgstr "Assign" + +#. l10n: Don't translate "nobody" or "default" +#: projects.py:230 +msgid "You cannot remove the \"nobody\" or \"default\" user" +msgstr "You cannot remove the \"nobody\" or \"default\" user" + +#: projects.py:382 projects.py:444 +msgid "You do not have rights to alter goals here" +msgstr "You do not have rights to alter goals here" + +#: projects.py:510 +msgid "You do not have rights to upload files here" +msgstr "You do not have rights to upload files here" + +#: projects.py:513 +msgid "You do not have rights to overwrite files here" +msgstr "You do not have rights to overwrite files here" + +#: projects.py:515 +msgid "You do not have rights to upload new files here" +msgstr "You do not have rights to upload new files here" + +#: projects.py:524 +msgid "You do not have rights to update files here" +msgstr "You do not have rights to update files here" + +#: projects.py:555 +msgid "You do not have rights to commit files here" +msgstr "You do not have rights to commit files here" + +#: projects.py:977 projects.py:1019 +msgid "You do not have rights to alter assignments here" +msgstr "You do not have rights to alter assignments here" + +#: projects.py:1219 +msgid "You do not have rights to change translations here" +msgstr "You do not have rights to change translations here" + +#: projects.py:1229 +msgid "You do not have rights to suggest changes here" +msgstr "You do not have rights to suggest changes here" + +#: projects.py:1245 projects.py:1263 +msgid "You do not have rights to review suggestions here" +msgstr "You do not have rights to review suggestions here" + +#: translatepage.py:103 +#, python-format +msgid "" +"%d/%d translated\n" +"(%d untranslated, %d fuzzy)" +msgstr "" +"%d/%d translated\n" +"(%d untranslated, %d fuzzy)" + +#. l10n: first parameter: name of the installation (like "Pootle") +#. l10n: second parameter: project name +#. l10n: third parameter: target language +#. l10n: fourth parameter: file name +#: translatepage.py:113 +#, python-format +msgid "%s: translating %s into %s: %s" +msgstr "%s: translating %s into %s: %s" + +#. l10n: Heading above the table column with the source language +#: translatepage.py:128 +msgid "Original" +msgstr "Original" + +#. l10n: Heading above the table column with the target language +#: translatepage.py:130 +msgid "Translation" +msgstr "Translation" + +#: translatepage.py:133 +msgid "Accept suggestion" +msgstr "Accept suggestion" + +#: translatepage.py:134 +msgid "Reject suggestion" +msgstr "Reject suggestion" + +#. l10n: Heading above the textarea for translator comments. +#: translatepage.py:137 +msgid "Translator comments" +msgstr "Translator comments" + +#. l10n: Heading above the comments extracted from the programing source code +#: translatepage.py:139 +msgid "Developer comments" +msgstr "Developer comments" + +#. l10n: This heading refers to related translations and terminology +#: translatepage.py:141 +msgid "Related" +msgstr "Related" + +#. l10n: Text displayed when an AJAX petition is being made +#: translatepage.py:155 +msgid "Working..." +msgstr "Working..." + +#. l10n: Text displayed in an alert box when an AJAX petition has failed +#: translatepage.py:157 +msgid "Error: Something went wrong." +msgstr "Error: Something went wrong." + +#. l10n: "batch" refers to the set of translations that were reviewed +#: translatepage.py:171 +msgid "End of batch" +msgstr "End of batch" + +#: translatepage.py:173 +msgid "Click here to return to the index" +msgstr "Click here to return to the index" + +#. l10n: noun (the start) +#: translatepage.py:187 translatepage.py:190 +msgid "Start" +msgstr "Start" + +#. l10n: the parameter refers to the number of messages +#: translatepage.py:194 translatepage.py:197 +#, python-format +msgid "Previous %d" +msgstr "Previous %d" + +#. l10n: the third parameter refers to the total number of messages in the file +#: translatepage.py:199 +#, python-format +msgid "Items %d to %d of %d" +msgstr "Items %d to %d of %d" + +#. l10n: the parameter refers to the number of messages +#: translatepage.py:204 translatepage.py:207 +#, python-format +msgid "Next %d" +msgstr "Next %d" + +#. l10n: noun (the end) +#: translatepage.py:210 translatepage.py:213 +msgid "End" +msgstr "End" + +#. l10n: the parameter is the name of one of the quality checks, like "fuzzy" +#: translatepage.py:230 +#, python-format +msgid "checking %s" +msgstr "checking %s" + +#: translatepage.py:398 +#, python-format +msgid "There are no items matching that search ('%s')" +msgstr "There are no items matching that search ('%s')" + +#: translatepage.py:400 +msgid "You have finished going through the items you selected" +msgstr "You have finished going through the items you selected" + +#: translatepage.py:643 +msgid "Singular" +msgstr "Singular" + +#: translatepage.py:644 +msgid "Plural" +msgstr "Plural" + +#. l10n: verb +#: translatepage.py:658 +msgid "Edit" +msgstr "Edit" + +#. l10n: verb +#: translatepage.py:674 +msgid "Copy" +msgstr "Copy" + +#: translatepage.py:675 translatepage.py:849 +msgid "Skip" +msgstr "Skip" + +#. l10n: verb +#: translatepage.py:677 translatepage.py:848 users.py:312 +msgid "Back" +msgstr "Back" + +#: translatepage.py:679 +msgid "Submit" +msgstr "Submit" + +#. l10n: action that increases the height of the textarea +#: translatepage.py:682 +msgid "Grow" +msgstr "Grow" + +#. l10n: action that decreases the height of the textarea +#: translatepage.py:684 +msgid "Shrink" +msgstr "Shrink" + +#: translatepage.py:706 translatepage.py:800 translatepage.py:837 +#: translatepage.py:870 +#, python-format +msgid "Plural Form %d" +msgstr "Plural Form %d" + +#. l10n: This is an error message that will display if the relevant problem occurs +#: translatepage.py:722 +msgid "" +"Translation not possible because plural information for your language is not " +"available. Please contact the site administrator." +msgstr "" +"Translation not possible because plural information for your language is not " +"available. Please contact the site administrator." + +#: translatepage.py:804 +msgid "Current Translation:" +msgstr "Current Translation:" + +#. l10n: First parameter: number +#. l10n: Second parameter: name of translator +#: translatepage.py:817 +#, python-format +msgid "Suggestion %d by %s:" +msgstr "Suggestion %d by %s:" + +#: translatepage.py:819 +#, python-format +msgid "Suggestion %d:" +msgstr "Suggestion %d:" + +#. l10n: parameter: name of translator +#: translatepage.py:823 +#, python-format +msgid "Suggestion by %s:" +msgstr "Suggestion by %s:" + +#: translatepage.py:825 +msgid "Suggestion:" +msgstr "Suggestion:" + +#: users.py:43 +#, python-format +msgid "You must supply a valid password of at least %d characters." +msgstr "You must supply a valid password of at least %d characters." + +#: users.py:45 +msgid "The password is not the same as the confirmation." +msgstr "The password is not the same as the confirmation." + +#: users.py:60 +msgid "Login to Pootle" +msgstr "Login to Pootle" + +#: users.py:66 +msgid "Username:" +msgstr "Username:" + +#: users.py:68 +msgid "Password:" +msgstr "Password:" + +#: users.py:69 +msgid "Language:" +msgstr "Language:" + +#: users.py:71 +msgid "Login" +msgstr "Login" + +#: users.py:77 +msgid "Default" +msgstr "Default" + +#: users.py:112 +msgid "Please enter your registration details" +msgstr "Please enter your registration details" + +#: users.py:115 users.py:475 +msgid "Pootle Registration" +msgstr "Pootle Registration" + +#: users.py:122 users.py:158 +msgid "Your requested username" +msgstr "Your requested username" + +#: users.py:125 users.py:429 +msgid "You must supply a valid email address" +msgstr "You must supply a valid email address" + +#: users.py:128 +msgid "Your full name" +msgstr "Your full name" + +#: users.py:131 +msgid "Your desired password" +msgstr "Your desired password" + +#: users.py:133 users.py:189 +msgid "Confirm password" +msgstr "Confirm password" + +#: users.py:134 +msgid "Type your password again to ensure it is entered correctly" +msgstr "Type your password again to ensure it is entered correctly" + +#: users.py:136 +msgid "Register Account" +msgstr "Register Account" + +#: users.py:145 +msgid "Please enter your activation details" +msgstr "Please enter your activation details" + +#: users.py:150 +msgid "Pootle Account Activation" +msgstr "Pootle Account Activation" + +#: users.py:160 +msgid "Activation Code" +msgstr "Activation Code" + +#: users.py:161 +msgid "The activation code you received" +msgstr "The activation code you received" + +#: users.py:163 +msgid "Activate Account" +msgstr "Activate Account" + +#: users.py:175 +#, python-format +msgid "Options for: %s" +msgstr "Options for: %s" + +#: users.py:181 +msgid "Personal Details" +msgstr "Personal Details" + +#: users.py:186 +msgid "Email" +msgstr "Email" + +#: users.py:190 +msgid "Translation Interface Configuration" +msgstr "Translation Interface Configuration" + +#: users.py:191 +msgid "User Interface language" +msgstr "User Interface language" + +#: users.py:192 +msgid "My Projects" +msgstr "My Projects" + +#: users.py:194 +msgid "My Languages" +msgstr "My Languages" + +#: users.py:196 +msgid "Home page" +msgstr "Home page" + +#: users.py:202 +msgid "Alternative Source Language" +msgstr "Alternative Source Language" + +#. l10n: 'None' is displayed as the first item in the alternative source languages list and disables the feature. +#: users.py:240 +msgid "None" +msgstr "None" + +#: users.py:257 +msgid "Input Height (in lines)" +msgstr "Input Height (in lines)" + +#: users.py:258 +msgid "Number of rows in view mode" +msgstr "Number of rows in view mode" + +#: users.py:259 +msgid "Number of rows in translate mode" +msgstr "Number of rows in translate mode" + +#: users.py:307 +msgid "Error" +msgstr "Error" + +#: users.py:359 +msgid "You need to be siteadmin to change users" +msgstr "You need to be siteadmin to change users" + +#: users.py:423 +msgid "" +"Username must be alphanumeric, and must start with an alphabetic character." +msgstr "" +"Username must be alphanumeric, and must start with an alphabetic character." + +#: users.py:438 +msgid "" +"You (or someone else) attempted to register an account with your username.\n" +msgstr "" +"You (or someone else) attempted to register an account with your username.\n" + +#: users.py:439 +msgid "We don't store your actual password but only a hash of it.\n" +msgstr "We don't store your actual password but only a hash of it.\n" + +#: users.py:441 +#, python-format +msgid "If you have a problem with registration, please contact %s.\n" +msgstr "If you have a problem with registration, please contact %s.\n" + +#: users.py:443 +msgid "" +"If you have a problem with registration, please contact the site " +"administrator.\n" +msgstr "" +"If you have a problem with registration, please contact the site " +"administrator.\n" + +#: users.py:444 +msgid "" +"That username already exists. An email will be sent to the registered email " +"address.\n" +msgstr "" +"That username already exists. An email will be sent to the registered email " +"address.\n" + +#: users.py:446 +#, python-format +msgid "Proceeding to <a href='%s'>login</a>\n" +msgstr "Proceeding to <a href='%s'>login</a>\n" + +#: users.py:452 +msgid "A Pootle account has been created for you using this email address.\n" +msgstr "A Pootle account has been created for you using this email address.\n" + +#: users.py:454 +msgid "To activate your account, follow this link:\n" +msgstr "To activate your account, follow this link:\n" + +#: users.py:460 +#, python-format +msgid "" +"Your activation code is:\n" +"%s\n" +msgstr "" +"Your activation code is:\n" +"%s\n" + +#: users.py:462 +msgid "" +"If you are unable to follow the link, please enter the above code at the " +"activation page.\n" +msgstr "" +"If you are unable to follow the link, please enter the above code at the " +"activation page.\n" + +#: users.py:463 +msgid "" +"This message is sent to verify that the email address is in fact correct. If " +"you did not want to register an account, you may simply ignore the message.\n" +msgstr "" +"This message is sent to verify that the email address is in fact correct. If " +"you did not want to register an account, you may simply ignore the message.\n" + +#: users.py:465 +#, python-format +msgid "" +"Account created. You will be emailed login details and an activation code. " +"Please enter your activation code on the <a href='%s'>activation page</a>." +msgstr "" +"Account created. You will be emailed login details and an activation code. " +"Please enter your activation code on the <a href='%s'>activation page</a>." + +#: users.py:467 +msgid "(Or simply click on the activation link in the email)" +msgstr "(Or simply click on the activation link in the email)" + +#: users.py:469 +#, python-format +msgid "Your user name is: %s\n" +msgstr "Your user name is: %s\n" + +#: users.py:471 +#, python-format +msgid "Your password is: %s\n" +msgstr "Your password is: %s\n" + +#: users.py:472 +#, python-format +msgid "Your registered email address is: %s\n" +msgstr "Your registered email address is: %s\n" + +#: users.py:500 +msgid "Redirecting to Registration Page..." +msgstr "Redirecting to Registration Page..." + +#: users.py:524 +msgid "Redirecting to login Page..." +msgstr "Redirecting to login Page..." + +#: users.py:527 +msgid "Your account has been activated! Redirecting to login..." +msgstr "Your account has been activated! Redirecting to login..." + +#: users.py:531 +msgid "The activation information was not valid." +msgstr "The activation information was not valid." + +#: users.py:532 +msgid "Activation Failed" +msgstr "Activation Failed" + +#: users.py:649 +msgid "Input height must be numeric" +msgstr "Input height must be numeric" + +#: users.py:650 +msgid "Input width must be numeric" +msgstr "Input width must be numeric" + +#: users.py:651 +msgid "The number of rows displayed in view mode must be numeric" +msgstr "The number of rows displayed in view mode must be numeric" + +#: users.py:652 +msgid "The number of rows displayed in translate mode must be numeric" +msgstr "The number of rows displayed in translate mode must be numeric" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <winterstream@us...> - 2008-08-28 09:21:01
|
Revision: 8223 http://translate.svn.sourceforge.net/translate/?rev=8223&view=rev Author: winterstream Date: 2008-08-28 09:21:09 +0000 (Thu, 28 Aug 2008) Log Message: ----------- Fix the location of the statsdb in pootle.prefs to point to a valid database location. Modified Paths: -------------- src/trunk/Pootle/pootle.prefs Modified: src/trunk/Pootle/pootle.prefs =================================================================== --- src/trunk/Pootle/pootle.prefs 2008-08-28 06:29:49 UTC (rev 8222) +++ src/trunk/Pootle/pootle.prefs 2008-08-28 09:21:09 UTC (rev 8223) @@ -14,7 +14,7 @@ # Pootle.stats_db # # Set this to the location of the statistics database used by Pootle. - # stats_db = "~" + # stats_db = "/var/cache/pootle/stats.db" # Pootle.baseurl # This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-28 06:29:38
|
Revision: 8222 http://translate.svn.sourceforge.net/translate/?rev=8222&view=rev Author: dwaynebailey Date: 2008-08-28 06:29:49 +0000 (Thu, 28 Aug 2008) Log Message: ----------- Do user expansion of input filename to allow ~ expansion to user home directory. Modified Paths: -------------- src/trunk/translate/filters/pofilter.py Modified: src/trunk/translate/filters/pofilter.py =================================================================== --- src/trunk/translate/filters/pofilter.py 2008-08-27 16:18:08 UTC (rev 8221) +++ src/trunk/translate/filters/pofilter.py 2008-08-28 06:29:49 UTC (rev 8222) @@ -119,18 +119,21 @@ checkerclasses = [options.filterclass, checks.StandardUnitChecker] checkerconfig = checks.CheckerConfig(targetlanguage=options.targetlanguage) if options.notranslatefile: + options.notranslatefile = os.path.expanduser(options.notranslatefile) if not os.path.exists(options.notranslatefile): self.error("notranslatefile %r does not exist" % options.notranslatefile) notranslatewords = [line.strip() for line in open(options.notranslatefile).readlines()] notranslatewords = dict.fromkeys([key for key in notranslatewords]) checkerconfig.notranslatewords.update(notranslatewords) if options.musttranslatefile: + options.musttranslatefile = os.path.expanduser(options.musttranslatefile) if not os.path.exists(options.musttranslatefile): self.error("musttranslatefile %r does not exist" % options.musttranslatefile) musttranslatewords = [line.strip() for line in open(options.musttranslatefile).readlines()] musttranslatewords = dict.fromkeys([key for key in musttranslatewords]) checkerconfig.musttranslatewords.update(musttranslatewords) if options.validcharsfile: + options.validcharsfile = os.path.expanduser(options.validcharsfile) if not os.path.exists(options.validcharsfile): self.error("validcharsfile %r does not exist" % options.validcharsfile) validchars = open(options.validcharsfile).read() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <winterstream@us...> - 2008-08-27 16:17:59
|
Revision: 8221 http://translate.svn.sourceforge.net/translate/?rev=8221&view=rev Author: winterstream Date: 2008-08-27 16:18:08 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Added an ugly hack to force the recalculation of the stats of a PO file which lacks a header and then gains one by being saved in Pootle. Modified Paths: -------------- src/trunk/Pootle/pootlefile.py Modified: src/trunk/Pootle/pootlefile.py =================================================================== --- src/trunk/Pootle/pootlefile.py 2008-08-27 16:17:18 UTC (rev 8220) +++ src/trunk/Pootle/pootlefile.py 2008-08-27 16:18:08 UTC (rev 8221) @@ -496,6 +496,8 @@ """updates a translation with a new target value""" self.pofreshen() unit = self.getitem(item) + # See hack description below + recache_file = False if newvalues.has_key("target"): unit.target = newvalues["target"] @@ -515,6 +517,7 @@ # XXX: If we needed to add a header, the index value in item will be one out after # adding the header. # TODO: remove once we force the PO class to always output headers + recache_file = self.header() is None self.updateheader(add=True, **headerupdates) if languageprefs: nplurals = getattr(languageprefs, "nplurals", None) @@ -522,6 +525,12 @@ if nplurals and pluralequation: self.updateheaderplural(nplurals, pluralequation) self.savepofile() + if recache_file: + # This is an ugly hack to force stats to be recalculated for a PO file + # which lacked a header, but which should just have been saved to disc + # with a header. + self.reset_statistics() + self.statistics.getstats() self.statistics.reclassifyunit(item) self.reset_statistics() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <winterstream@us...> - 2008-08-27 16:17:09
|
Revision: 8220 http://translate.svn.sourceforge.net/translate/?rev=8220&view=rev Author: winterstream Date: 2008-08-27 16:17:18 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Removed no-op code. Modified Paths: -------------- src/trunk/Pootle/projects.py Modified: src/trunk/Pootle/projects.py =================================================================== --- src/trunk/Pootle/projects.py 2008-08-27 16:16:31 UTC (rev 8219) +++ src/trunk/Pootle/projects.py 2008-08-27 16:17:18 UTC (rev 8220) @@ -551,11 +551,6 @@ if os.path.exists(pathname): popath = os.path.join(dirname, pofilename) currentpofile = self.getpofile(popath) - # reading BASE version of file - origcontents = versioncontrol.getcleanfile(pathname, "BASE") - origpofile = pootlefile.pootlefile(self, popath) - originfile = cStringIO.StringIO(origcontents) - origpofile.parse(originfile) # matching current file with BASE version # TODO: add some locking here... # reading new version of file @@ -563,7 +558,6 @@ newpofile = pootlefile.pootlefile(self, popath) newpofile.pofreshen() newpofile.mergefile(currentpofile, "versionmerge") - self.pofiles[pofilename] = newpofile else: versioncontrol.updatefile(pathname) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <winterstream@us...> - 2008-08-27 16:16:21
|
Revision: 8219 http://translate.svn.sourceforge.net/translate/?rev=8219&view=rev Author: winterstream Date: 2008-08-27 16:16:31 +0000 (Wed, 27 Aug 2008) Log Message: ----------- We don't need to reread a file to have its stats recalculated. Modified Paths: -------------- src/trunk/Pootle/pootlefile.py Modified: src/trunk/Pootle/pootlefile.py =================================================================== --- src/trunk/Pootle/pootlefile.py 2008-08-27 16:15:42 UTC (rev 8218) +++ src/trunk/Pootle/pootlefile.py 2008-08-27 16:16:31 UTC (rev 8219) @@ -659,8 +659,6 @@ #TODO: We don't support updating the header yet. self.savepofile() self.reset_statistics() - # the easiest way to recalculate everything - self.readpofile() return #Let's update selected header entries. Only the ones listed below, and ones @@ -693,8 +691,6 @@ self.savepofile() self.reset_statistics() - # the easiest way to recalculate everything - self.readpofile() return pootlefile _pootlefile_classes = {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <winterstream@us...> - 2008-08-27 16:15:34
|
Revision: 8218 http://translate.svn.sourceforge.net/translate/?rev=8218&view=rev Author: winterstream Date: 2008-08-27 16:15:42 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Removed dead code in pootlefile Modified Paths: -------------- src/trunk/Pootle/pootlefile.py Modified: src/trunk/Pootle/pootlefile.py =================================================================== --- src/trunk/Pootle/pootlefile.py 2008-08-27 16:14:56 UTC (rev 8217) +++ src/trunk/Pootle/pootlefile.py 2008-08-27 16:15:42 UTC (rev 8218) @@ -515,9 +515,6 @@ # XXX: If we needed to add a header, the index value in item will be one out after # adding the header. # TODO: remove once we force the PO class to always output headers - force_recache = False - if not self.header(): - force_recache = True self.updateheader(add=True, **headerupdates) if languageprefs: nplurals = getattr(languageprefs, "nplurals", None) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <winterstream@us...> - 2008-08-27 16:14:46
|
Revision: 8217 http://translate.svn.sourceforge.net/translate/?rev=8217&view=rev Author: winterstream Date: 2008-08-27 16:14:56 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Don't allow units to be shared between stores. There be dragons. The thing is, this won't work with our libgettext bindings, since libgettext only provides us with iterators to translation stores. So that's the real reason we require units to be copied instead of shared. Modified Paths: -------------- src/trunk/Pootle/pootlefile.py Modified: src/trunk/Pootle/pootlefile.py =================================================================== --- src/trunk/Pootle/pootlefile.py 2008-08-27 15:39:09 UTC (rev 8216) +++ src/trunk/Pootle/pootlefile.py 2008-08-27 16:14:56 UTC (rev 8217) @@ -648,10 +648,7 @@ if oldpo is None: if allownewstrings: - if isinstance(newpo, po.pounit): - self.addunit(newpo) - else: - self.addunit(self.UnitClass.buildfromunit(newpo)) + self.addunit(self.UnitClass.buildfromunit(newpo)) elif newpo is None: # TODO: mark the old one as obsolete pass This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <friedelwolff@us...> - 2008-08-27 15:39:01
|
Revision: 8216 http://translate.svn.sourceforge.net/translate/?rev=8216&view=rev Author: friedelwolff Date: 2008-08-27 15:39:09 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Provide better error message if the indexer could not be initialised Modified Paths: -------------- src/trunk/Pootle/projects.py Modified: src/trunk/Pootle/projects.py =================================================================== --- src/trunk/Pootle/projects.py 2008-08-27 13:21:09 UTC (rev 8215) +++ src/trunk/Pootle/projects.py 2008-08-27 15:39:09 UTC (rev 8216) @@ -128,7 +128,7 @@ self._index_initialized = True return indexer except Exception, e: - print "Could not intialize indexer: %s" % repr(e) + print "Could not intialize indexer for %s in %s: %s" % (self.projectcode, self.languagecode, str(e)) self._indexing_enabled = False return None else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <friedelwolff@us...> - 2008-08-27 13:20:59
|
Revision: 8215 http://translate.svn.sourceforge.net/translate/?rev=8215&view=rev Author: friedelwolff Date: 2008-08-27 13:21:09 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Add the jquery js directory Modified Paths: -------------- src/trunk/pootlesetup.py Modified: src/trunk/pootlesetup.py =================================================================== --- src/trunk/pootlesetup.py 2008-08-27 09:33:09 UTC (rev 8214) +++ src/trunk/pootlesetup.py 2008-08-27 13:21:09 UTC (rev 8215) @@ -201,6 +201,7 @@ pootlefiles.append(listfiles(join('Pootle', 'html'))) pootlefiles.append(listfiles(join('Pootle', 'html', 'images'))) pootlefiles.append(listfiles(join('Pootle', 'html', 'js'))) + pootlefiles.append(listfiles(join('Pootle', 'html', 'js', 'jquery'))) pootlefiles.append(listfiles(join('Pootle', 'html', 'doc'))) pootlefiles.append(listfiles(join('Pootle', 'html', 'doc', 'en'))) pootlefiles.append(listfiles(join('Pootle', 'templates'))) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-27 09:33:00
|
Revision: 8214 http://translate.svn.sourceforge.net/translate/?rev=8214&view=rev Author: dwaynebailey Date: 2008-08-27 09:33:09 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Don't forget Windows RC file support Modified Paths: -------------- src/trunk/translate/README Modified: src/trunk/translate/README =================================================================== --- src/trunk/translate/README 2008-08-27 09:26:58 UTC (rev 8213) +++ src/trunk/translate/README 2008-08-27 09:33:09 UTC (rev 8214) @@ -14,8 +14,9 @@ At its core the software contains a set of classes for handling various localization storage formats: DTD, properties, OpenOffice.org GSI/SDF, -CSV, MO, Qt .ts, TMX, TBX, WordFast txt, Gettext .mo, and of course PO and -XLIFF. It also provides scripts to convert between these formats. +CSV, MO, Qt .ts, TMX, TBX, WordFast txt, Gettext .mo, Windows RC, and +of course PO and XLIFF. It also provides scripts to convert between +these formats. Also part of the Toolkit are Python programs to create word counts, merge translations and perform various checks on translation files. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-27 09:26:49
|
Revision: 8213 http://translate.svn.sourceforge.net/translate/?rev=8213&view=rev Author: dwaynebailey Date: 2008-08-27 09:26:58 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Package man pages Modified Paths: -------------- src/trunk/packaging/pootle.spec Modified: src/trunk/packaging/pootle.spec =================================================================== --- src/trunk/packaging/pootle.spec 2008-08-27 09:15:34 UTC (rev 8212) +++ src/trunk/packaging/pootle.spec 2008-08-27 09:26:58 UTC (rev 8213) @@ -4,7 +4,7 @@ Name: pootle Version: 1.2.0 -Release: 0.2.beta2%{?dist} +Release: 0.3.beta2%{?dist} Summary: Localization and translation management web application Group: Development/Tools @@ -47,6 +47,21 @@ rm -rf $RPM_BUILD_ROOT %{__python} pootlesetup.py install -O1 --skip-build --root $RPM_BUILD_ROOT +# Create the manpages +mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man1 +for program in $RPM_BUILD_ROOT/%{_bindir}/*; +do + case $(basename $program) in + PootleServer) + ;; + *) + LC_ALL=C PYTHONPATH=. $program --manpage \ + > $RPM_BUILD_ROOT/%{_mandir}/man1/$(basename $program).1 \ + || rm -f $RPM_BUILD_ROOT/%{_mandir}/man1/$(basename $program).1 + ;; + esac +done + # remove documentation files from site-packages rm $RPM_BUILD_ROOT/%{python_sitelib}/Pootle/{COPYING,ChangeLog,LICENSE,README} rm $RPM_BUILD_ROOT/%{python_sitelib}/Pootle/test_* @@ -88,6 +103,7 @@ %doc Pootle/{COPYING,ChangeLog,README} %{_bindir}/* %{_sbindir}/* +%{_mandir}/man1/* %config /etc/pootle %config /etc/sysconfig/pootle %{python_sitelib}/Pootle* @@ -100,6 +116,9 @@ %changelog +* Wed Aug 27 2008 Dwayne Bailey <dwayne@...> - 1.2.0-0.3.beta2.fc9 +- Create man pages + * Wed Aug 27 2008 Dwayne Bailey <dwayne@...> - 1.2.0-0.2.beta2.fc9 - Update to 1.2.0-beta2 - Fix initscript installation location This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-27 09:15:25
|
Revision: 8212 http://translate.svn.sourceforge.net/translate/?rev=8212&view=rev Author: dwaynebailey Date: 2008-08-27 09:15:34 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Update to 1.2.0-beta2, fix initscript location Modified Paths: -------------- src/trunk/packaging/pootle.spec Modified: src/trunk/packaging/pootle.spec =================================================================== --- src/trunk/packaging/pootle.spec 2008-08-27 08:10:52 UTC (rev 8211) +++ src/trunk/packaging/pootle.spec 2008-08-27 09:15:34 UTC (rev 8212) @@ -4,14 +4,14 @@ Name: pootle Version: 1.2.0 -Release: 0.1.beta1%{?dist} +Release: 0.2.beta2%{?dist} Summary: Localization and translation management web application Group: Development/Tools License: GPLv2+ URL: http://translate.sourceforge.net/wiki/pootle/index #Source: http://downloads.sourceforge.net/translate/%{name}-%{version}.tar.bz2 -Source: http://translate.sourceforge.net/snapshots/%{fullname}-%{version}-beta1/%{fullname}-%{version}-beta1.tar.bz2 +Source: http://translate.sourceforge.net/snapshots/%{fullname}-%{version}-beta2/%{fullname}-%{version}-beta2.tar.bz2 Source1: pootle-initscript Source2: pootle-logrotate Source3: pootle-sysconfig @@ -35,7 +35,7 @@ A web application for managing the translation of Gettext PO and XLIFF files. %prep -%setup -q -n %{fullname}-%{version}-beta1 +%setup -q -n %{fullname}-%{version}-beta2 %patch1 -p1 @@ -60,7 +60,7 @@ install $RPM_BUILD_ROOT/%{python_sitelib}/Pootle/*.prefs $RPM_BUILD_ROOT/etc/pootle install -d $RPM_BUILD_ROOT/var/cache/pootle install -d $RPM_BUILD_ROOT/var/log/pootle -install $RPM_SOURCE_DIR/pootle-initscript -D $RPM_BUILD_ROOT/etc/init.d/pootle +install $RPM_SOURCE_DIR/pootle-initscript -D $RPM_BUILD_ROOT/etc/rc.d/init.d/pootle install $RPM_SOURCE_DIR/pootle-logrotate -D $RPM_BUILD_ROOT/etc/logrotate.d/pootle install $RPM_SOURCE_DIR/pootle-sysconfig -D $RPM_BUILD_ROOT/etc/sysconfig/pootle @@ -95,12 +95,16 @@ /var/lib/pootle %dir /var/cache/pootle %dir /var/log/pootle -/etc/init.d/pootle +/etc/rc.d/init.d/pootle /etc/logrotate.d/pootle %changelog -* Thu Feb 14 2008 Dwayne Bailey <dwayne@...> - 1.2.0-0.1.beta1.fc9 +* Wed Aug 27 2008 Dwayne Bailey <dwayne@...> - 1.2.0-0.2.beta2.fc9 +- Update to 1.2.0-beta2 +- Fix initscript installation location + +* Sun Aug 24 2008 Dwayne Bailey <dwayne@...> - 1.2.0-0.1.beta1.fc9 - Build for 1.2.0-beta1 release - Create initscripts, sysconfig; create proper logging; configure stats database This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <friedelwolff@us...> - 2008-08-27 08:10:42
|
Revision: 8211 http://translate.svn.sourceforge.net/translate/?rev=8211&view=rev Author: friedelwolff Date: 2008-08-27 08:10:52 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Some updates - supported formats +poterminology, etc. Modified Paths: -------------- src/trunk/translate/README Modified: src/trunk/translate/README =================================================================== --- src/trunk/translate/README 2008-08-27 07:59:50 UTC (rev 8210) +++ src/trunk/translate/README 2008-08-27 08:10:52 UTC (rev 8211) @@ -7,18 +7,18 @@ hosted at http://translate.sourceforge.net/ The software includes programs to covert localization formats to the common -PO, and emerging XLIFF format. Programs to check and manage PO and XLIFF -files. Online documentation includes guides on using the tools, running a -localization project and how to localize various projects from OpenOffice.org -to Mozilla. +PO, and emerging XLIFF format. There are also programs to check and manage PO +and XLIFF files. Online documentation includes guides on using the tools, +running a localization project and how to localize various projects from +OpenOffice.org to Mozilla. At its core the software contains a set of classes for handling various localization storage formats: DTD, properties, OpenOffice.org GSI/SDF, -CSV, MO, Qt .ts and of course PO and XLIFF. It also provides scripts to -convert between these formats. +CSV, MO, Qt .ts, TMX, TBX, WordFast txt, Gettext .mo, and of course PO and +XLIFF. It also provides scripts to convert between these formats. Also part of the Toolkit are Python programs to create word counts, merge -translations and perform various checks on PO and XLIFF files. +translations and perform various checks on translation files. Download @@ -215,4 +215,6 @@ for creating a segmented translation memory. poswap - uses a translation of another language that you would rather use than English as source language +poterminology - analise PO or POT files to build a list of frequently occuring + words and phrases This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-27 07:59:40
|
Revision: 8210 http://translate.svn.sourceforge.net/translate/?rev=8210&view=rev Author: dwaynebailey Date: 2008-08-27 07:59:50 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Various scripts and config files needed for Pootle on Fedora. Added Paths: ----------- src/trunk/packaging/pootle-initscript src/trunk/packaging/pootle-logrotate src/trunk/packaging/pootle-sysconfig Added: src/trunk/packaging/pootle-initscript =================================================================== --- src/trunk/packaging/pootle-initscript (rev 0) +++ src/trunk/packaging/pootle-initscript 2008-08-27 07:59:50 UTC (rev 8210) @@ -0,0 +1,111 @@ +#!/bin/bash +# +# pootle Startup script for the Pootle localisation server +# +# chkconfig: - 20 80 +# description: Web-based localisation server that allows online translations and \ +# management of localisation projects using PO or XLIFF files. + +### BEGIN INIT INFO +# Provides: +# Required-Start: +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: +# Default-Stop: +# Short-Description: +# Description: +### END INIT INFO + +# Source function library. +. /etc/rc.d/init.d/functions + +exec="/usr/sbin/PootleServer" +prog="pootle" + +[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog + +prefsfile=${PREFSFILE-/etc/pootle/pootle.prefs} +port=${PORT-"8080"} +pidfile=${PIDFILE-/var/run/pootle.pid} +logfile=${LOGFILE-/var/log/pootle/access.log} +errorfile=${ERRORFILE-/var/log/pootle/errors.log} + +lockfile=/var/lock/subsys/$prog + +start() { + [ -x $exec ] || exit 5 + [ -f $config ] || exit 6 + echo -n $"Starting $prog: " + daemon --pidfile=${pidfile} $exec -B --port=${port} --prefsfile=${prefsfile} --pidfile=${pidfile} --logerrors=traceback >> $logfile 2> $errorfile + retval=$? + echo + [ $retval -eq 0 ] && touch $lockfile + return $retval +} + +stop() { + echo -n $"Stopping $prog: " + killproc -p ${pidfile} $exec + retval=$? + echo + [ $retval -eq 0 ] && rm -f $lockfile + return $retval +} + +restart() { + stop + start +} + +reload() { + restart +} + +force_reload() { + restart +} + +rh_status() { + # run checks to determine if the service is running or use generic status + status $exec +} + +rh_status_q() { + rh_status >/dev/null 2>&1 +} + + +case "$1" in + start) + rh_status_q && exit 0 + $1 + ;; + stop) + rh_status_q || exit 0 + $1 + ;; + restart) + $1 + ;; + reload) + rh_status_q || exit 7 + $1 + ;; + force-reload) + force_reload + ;; + status) + rh_status + ;; + condrestart|try-restart) + rh_status_q || exit 0 + restart + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" + exit 2 +esac +exit $? + Added: src/trunk/packaging/pootle-logrotate =================================================================== --- src/trunk/packaging/pootle-logrotate (rev 0) +++ src/trunk/packaging/pootle-logrotate 2008-08-27 07:59:50 UTC (rev 8210) @@ -0,0 +1,5 @@ +/var/log/pootle/*.log { + missingok + notifempty +} + Added: src/trunk/packaging/pootle-sysconfig =================================================================== --- src/trunk/packaging/pootle-sysconfig (rev 0) +++ src/trunk/packaging/pootle-sysconfig 2008-08-27 07:59:50 UTC (rev 8210) @@ -0,0 +1,9 @@ +# Set the Pootle port +#PORT=8080 + +# Default preference file +#PREFSFILE=/etc/pootle/pootle.prefs + +# Pootle log file +#LOGFILE=/var/log/pootle/access.log +#ERRORFILE=/var/log/pootle/errors.log This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-27 06:40:57
|
Revision: 8209 http://translate.svn.sourceforge.net/translate/?rev=8209&view=rev Author: dwaynebailey Date: 2008-08-27 06:41:07 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Minor: fix source location URL Modified Paths: -------------- src/trunk/packaging/translate-toolkit.spec Modified: src/trunk/packaging/translate-toolkit.spec =================================================================== --- src/trunk/packaging/translate-toolkit.spec 2008-08-27 06:38:49 UTC (rev 8208) +++ src/trunk/packaging/translate-toolkit.spec 2008-08-27 06:41:07 UTC (rev 8209) @@ -9,7 +9,7 @@ License: GPLv2+ URL: http://translate.sourceforge.net/wiki/toolkit/index #Source0: http://downloads.sourceforge.net/translate/%{name}-%{version}.tar.bz2 -Source0: http://translate.sourceforge.net/snapshots/%{name}-%{version}-beta1/%{name}-%{version}-beta2.tar.bz2 +Source0: http://translate.sourceforge.net/snapshots/%{name}-%{version}-beta2/%{name}-%{version}-beta2.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwaynebailey@us...> - 2008-08-27 06:38:39
|
Revision: 8208 http://translate.svn.sourceforge.net/translate/?rev=8208&view=rev Author: dwaynebailey Date: 2008-08-27 06:38:49 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Update to 1.2.0-beta2 Modified Paths: -------------- src/trunk/packaging/translate-toolkit.spec Modified: src/trunk/packaging/translate-toolkit.spec =================================================================== --- src/trunk/packaging/translate-toolkit.spec 2008-08-27 03:46:32 UTC (rev 8207) +++ src/trunk/packaging/translate-toolkit.spec 2008-08-27 06:38:49 UTC (rev 8208) @@ -2,14 +2,14 @@ Name: translate-toolkit Version: 1.2 -Release: 0.1.beta1%{?dist} +Release: 0.2.beta2%{?dist} Summary: Tools to assist with localization Group: Development/Tools License: GPLv2+ URL: http://translate.sourceforge.net/wiki/toolkit/index #Source0: http://downloads.sourceforge.net/translate/%{name}-%{version}.tar.bz2 -Source0: http://translate.sourceforge.net/snapshots/%{name}-%{version}-beta1/%{name}-%{version}-beta1.tar.bz2 +Source0: http://translate.sourceforge.net/snapshots/%{name}-%{version}-beta1/%{name}-%{version}-beta2.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch @@ -50,7 +50,7 @@ %prep -%setup -q -n %{name}-%{version}-beta1 +%setup -q -n %{name}-%{version}-beta2 %build @@ -102,7 +102,10 @@ %changelog -* Tue Jun 3 2008 Dwayne Bailey <dwayne@...> - 1.2-0.1.beta1.fc9 +* Tue Aug 26 2008 Dwayne Bailey <dwayne@...> - 1.2-0.2.beta2.fc9 +- Update to 1.2-beta2 + +* Mon Aug 25 2008 Dwayne Bailey <dwayne@...> - 1.2-0.1.beta1.fc9 - Update to 1.2-beta1 * Tue Jun 3 2008 Dwayne Bailey <dwayne@...> - 1.1.1-1.fc9 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <clouserw@us...> - 2008-08-27 03:46:21
|
Revision: 8207 http://translate.svn.sourceforge.net/translate/?rev=8207&view=rev Author: clouserw Date: 2008-08-27 03:46:32 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Add a per-project option to ignore certain files from being scanned (bug 449350). Modified Paths: -------------- src/branches/mozootle/dbclasses.py src/branches/mozootle/potree.py Modified: src/branches/mozootle/dbclasses.py =================================================================== --- src/branches/mozootle/dbclasses.py 2008-08-27 01:19:33 UTC (rev 8206) +++ src/branches/mozootle/dbclasses.py 2008-08-27 03:46:32 UTC (rev 8207) @@ -110,8 +110,9 @@ localfiletype = Column(String(50), server_default="") createmofiles = Column(Boolean, server_default="0") treestyle = Column(String(20)) + ignoredfiles = Column(String(255), nullable=False) - def __init__(self, code, fullname = "", description = "", checkstyle = "", localfiletype = "", createmofiles=False, treestyle=""): + def __init__(self, code, fullname = "", description = "", checkstyle = "", localfiletype = "", createmofiles=False, treestyle="", ignoredfiles=""): self.code = code self.fullname = fullname self.description = description @@ -119,6 +120,7 @@ self.localfiletype = localfiletype self.createmofiles = createmofiles self.treestyle = treestyle + self.ignoredfiles = ignoredfiles def __repr__(self): return "<Project %s: %s>" % (self.code, self.fullname) Modified: src/branches/mozootle/potree.py =================================================================== --- src/branches/mozootle/potree.py 2008-08-27 01:19:33 UTC (rev 8206) +++ src/branches/mozootle/potree.py 2008-08-27 03:46:32 UTC (rev 8207) @@ -381,6 +381,15 @@ projectprefs = self.getprojectprefs(projectcode) setattr(projectprefs, "checkerstyle", projectcheckerstyle) + def getprojectignoredfiles(self, projectcode): + """returns a set of the ignored files for the project. This is temporary code + until a real preferences system is in place.""" + projectprefs = self.getprojectprefs(projectcode) + ignoredfiles = getattr(projectprefs, "ignoredfiles", projectcode) + if len(ignoredfiles) > 0: + return set(ignoredfiles.split(',')) + return [] + def getprojectcreatemofiles(self, projectcode): """returns whether the project builds MO files""" projectprefs = self.getprojectprefs(projectcode) @@ -497,6 +506,10 @@ def addfiles(podir, dirname, fnames): """adds the files to the set of files for this project""" + + # Remove the files we want to ignore + fnames = set(fnames) - self.getprojectignoredfiles(projectcode) + if dirname == os.curdir: basedirname = "" else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <clouserw@us...> - 2008-08-27 01:19:22
|
Revision: 8206 http://translate.svn.sourceforge.net/translate/?rev=8206&view=rev Author: clouserw Date: 2008-08-27 01:19:33 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Add dynamic hook calling; remove requirement for hook() Modified Paths: -------------- src/branches/mozootle/scripts/amodemo.py src/branches/mozootle/scripts/hooks.py Modified: src/branches/mozootle/scripts/amodemo.py =================================================================== --- src/branches/mozootle/scripts/amodemo.py 2008-08-27 00:49:27 UTC (rev 8205) +++ src/branches/mozootle/scripts/amodemo.py 2008-08-27 01:19:33 UTC (rev 8206) @@ -18,18 +18,6 @@ sourcefile = os.path.join(os.path.split(os.path.split(file)[0])[0], "en_US", "messages.po") return (combinedfile, mainfile, sourcefile) -def hook(hooktype, file, *args, **kwargs): - if hooktype == "initialize": - return initialize(file, *args, **kwargs) - if hooktype == "precommit": - return precommit(file, *args, **kwargs) - if hooktype == "postcommit": - return postcommit(file, *args, **kwargs) - if hooktype == "preupdate": - return preupdate(file, *args, **kwargs) - if hooktype == "postupdate": - return postupdate(file, *args, **kwargs) - def initialize(projectdir, languagecode): """The first paramater is the path to the project directory. It's up to this script to know any internal structure of the directory""" Modified: src/branches/mozootle/scripts/hooks.py =================================================================== --- src/branches/mozootle/scripts/hooks.py 2008-08-27 00:49:27 UTC (rev 8205) +++ src/branches/mozootle/scripts/hooks.py 2008-08-27 01:19:33 UTC (rev 8206) @@ -23,8 +23,8 @@ """ try: activehook = __import__(project, globals(), locals(), []) - if (hasattr(activehook, 'hook') and callable(activehook.hook)): - return activehook.hook(hooktype, file, *args, **kwargs) + if hasattr(activehook, hooktype) and callable(getattr(activehook, hooktype)): + return getattr(activehook, hooktype)(file, *args, **kwargs) else: return [] except ImportError: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <clouserw@us...> - 2008-08-27 00:49:17
|
Revision: 8205 http://translate.svn.sourceforge.net/translate/?rev=8205&view=rev Author: clouserw Date: 2008-08-27 00:49:27 +0000 (Wed, 27 Aug 2008) Log Message: ----------- - Add support for new project Initialization() function - Add support for pre/post commit hooks. I'm pretty sure this breaks things for non-hooking projects which we need to fix before mozootle goes back to trunk Modified Paths: -------------- src/branches/mozootle/adminpages.py src/branches/mozootle/projects.py src/branches/mozootle/templates/projectadmin.html Modified: src/branches/mozootle/adminpages.py =================================================================== --- src/branches/mozootle/adminpages.py 2008-08-27 00:44:32 UTC (rev 8204) +++ src/branches/mozootle/adminpages.py 2008-08-27 00:49:27 UTC (rev 8205) @@ -281,6 +281,16 @@ for languagecode in languagecodes: translationproject = self.potree.getproject(languagecode, self.projectcode) translationproject.converttemplates(self.session) + if "initialize" in argdict: + languagecodes = argdict.get("updatelanguage", None) + if not languagecodes: + raise ValueError("No languagecode given in doupdatelanguage") + if isinstance(languagecodes, (str, unicode)): + languagecodes = [languagecodes] + for languagecode in languagecodes: + translationproject = self.potree.getproject(languagecode, self.projectcode) + translationproject.initialize(self.session, languagecode) + main_link = self.localize("Back to main page") existing_title = self.localize("Existing languages") existing_languages = self.getexistinglanguages() @@ -293,6 +303,8 @@ full_name = self.localize("Full Name") # l10n: This refers to updating the translation files from the templates like with .pot files update_link = self.localize("Update from templates") + # l10n: This refers to running an intialization script for the given project+locale + initialize_link = self.localize("Initialize") templatename = "projectadmin" sessionvars = {"status": self.session.status, "isopen": self.session.isopen, "issiteadmin": self.session.issiteadmin()} instancetitle = getattr(self.session.instance, "title", session.localize("Pootle Demo")) @@ -302,7 +314,8 @@ "existing_title": existing_title, "existing_languages": existing_languages, "new_languages": new_languages, "update_button": update_button, "add_button": self.localize("Add Language"), - "main_link": main_link, "update_link": update_link, + "main_link": main_link, "update_link": update_link, + "initialize_link": initialize_link, "session": sessionvars, "instancetitle": instancetitle} pagelayout.PootlePage.__init__(self, templatename, templatevars, session, bannerheight=80) Modified: src/branches/mozootle/projects.py =================================================================== --- src/branches/mozootle/projects.py 2008-08-27 00:44:32 UTC (rev 8204) +++ src/branches/mozootle/projects.py 2008-08-27 00:49:27 UTC (rev 8205) @@ -47,6 +47,8 @@ import subprocess import datetime +from scripts import hooks + from sqlalchemy import * from sqlalchemy.exc import * from dbclasses import * @@ -614,14 +616,24 @@ author=session.username fulldir = os.path.split(pathname)[0] - self.runprojectscript(self.precommitdir, pathname, [author]) # Precommit + filestocommit = hooks.hook(self.projectcode, "precommit", pathname, author=author, message=message) + success = True try: - versioncontrol.commitfile(pathname, message=message, author=author) - success = 1 - except IOError, e: - success = 0 - self.runprojectscript(self.postcommitdir, pathname, [str(success)]) # Postcommit + for file in filestocommit: + versioncontrol.commitfile(file, message=message, author=author) + except Exception, e: + print "Failed to commit files: %s" % e + success = False + hooks.hook(self.projectcode, "postcommit", pathname, success=success) + def initialize(self, session, languagecode): + try: + projectdir = os.path.join(self.potree.podirectory, self.projectcode) + hooks.hook(self.projectcode, "initialize", projectdir, languagecode) + self.scanpofiles() + except Exception, e: + print "Failed to initialize (%s): %s" % (languagecode, e) + def converttemplates(self, session): """creates PO files from the templates""" projectdir = os.path.join(self.potree.podirectory, self.projectcode) Modified: src/branches/mozootle/templates/projectadmin.html =================================================================== --- src/branches/mozootle/templates/projectadmin.html 2008-08-27 00:44:32 UTC (rev 8204) +++ src/branches/mozootle/templates/projectadmin.html 2008-08-27 00:49:27 UTC (rev 8205) @@ -47,6 +47,7 @@ <td><span py:content="l.code">code</span></td> <td><input type="checkbox" name="updatelanguage" value="${l.code}"/></td> <td><a href="?doupdatelanguage=1&updatelanguage=${l.code}" py:content="update_link">Update from templates</a></td> + <td><a href="?initialize=1&updatelanguage=${l.code}" py:content="initialize_link">Initialize</a></td> </tr> </table> <input type="submit" name="doupdatelanguage" value="${update_button}"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <clouserw@us...> - 2008-08-27 00:44:23
|
Revision: 8204 http://translate.svn.sourceforge.net/translate/?rev=8204&view=rev Author: clouserw Date: 2008-08-27 00:44:32 +0000 (Wed, 27 Aug 2008) Log Message: ----------- Add script hook and the amodemo script, bug 449488. I'd rather not commit project-specific scripts to this SVN repo but they've gotta go somewhere and if not here they just become an SVN external. *shrug* Added Paths: ----------- src/branches/mozootle/scripts/__init__.py src/branches/mozootle/scripts/amodemo.py src/branches/mozootle/scripts/hooks.py Added: src/branches/mozootle/scripts/amodemo.py =================================================================== --- src/branches/mozootle/scripts/amodemo.py (rev 0) +++ src/branches/mozootle/scripts/amodemo.py 2008-08-27 00:44:32 UTC (rev 8204) @@ -0,0 +1,85 @@ +#!/usr/bin/python + +# Verbatim script for managing the addons.mozilla.org project. More information at +# https://wiki.mozilla.org/Verbatim +# +# Author: Wil Clouser <clouserw@...> +# Author: Dan Schafer <dschafer@...> + +import sys +import os +import os.path +import subprocess +from Pootle.scripts.convert import monopo2po, po2monopo + +def _getfiles(file): + mainfile = os.path.join(os.path.split(file)[0], "messages.po") + combinedfile = os.path.join(os.path.split(file)[0], "messages-combined.po") + sourcefile = os.path.join(os.path.split(os.path.split(file)[0])[0], "en_US", "messages.po") + return (combinedfile, mainfile, sourcefile) + +def hook(hooktype, file, *args, **kwargs): + if hooktype == "initialize": + return initialize(file, *args, **kwargs) + if hooktype == "precommit": + return precommit(file, *args, **kwargs) + if hooktype == "postcommit": + return postcommit(file, *args, **kwargs) + if hooktype == "preupdate": + return preupdate(file, *args, **kwargs) + if hooktype == "postupdate": + return postupdate(file, *args, **kwargs) + +def initialize(projectdir, languagecode): + """The first paramater is the path to the project directory. It's up to this + script to know any internal structure of the directory""" + + # Find the files we're working with + mainfile = os.path.join(projectdir, languagecode, 'LC_MESSAGES', 'messages.po') + combinedfile = os.path.join(projectdir, languagecode, 'LC_MESSAGES', 'messages-combined.po') + sourcefile = os.path.join(projectdir, 'en_US', 'LC_MESSAGES', 'messages.po') + + # Build our combined file + monopo2po.convertpo(open(sourcefile,"r"), open(combinedfile,"w"), open(mainfile,"r")) + + # TODO + # Eventually we'll need to build .po files from the .thtml files in /pages/ but + # running html2po on localized files doesn't make sense + + +def precommit(committedfile, author, message): + if os.path.basename(committedfile) == "messages-combined.po": + + # Get the files we'll be using + (combinedfile, mainfile, sourcefile) = _getfiles(committedfile) + + # Update messages.po + # print "Converting po %s to %s" % (combinedfile, mainfile) + po2monopo.convertpo(open(combinedfile,"r"), open(mainfile,"w")) + + # We want to commit messages.po + return [mainfile] + return [] + +def postcommit(committedfile, success): + if os.path.basename(committedfile) == "messages.po": + + # Get the files we'll be using + (combinedfile, mainfile, sourcefile) = _getfiles(committedfile) + + # Recreate messages-combined.po + # print "Converting amo %s to %s with template %s" % (sourcefile, combinedfile, mainfile) + monopo2po.convertpo(open(sourcefile,"r"), open(combinedfile,"w"), open(mainfile,"r")) + +def preupdate(updatedfile): + if os.path.basename(updatedfile) == "messages-combined.po": + + # Get the files we'll be using + (combinedfile, mainfile, sourcefile) = _getfiles(committedfile) + + # We want to update messages.po + return [mainfile] + return [] + +def postupdate(updatedfile): + pass Added: src/branches/mozootle/scripts/hooks.py =================================================================== --- src/branches/mozootle/scripts/hooks.py (rev 0) +++ src/branches/mozootle/scripts/hooks.py 2008-08-27 00:44:32 UTC (rev 8204) @@ -0,0 +1,34 @@ +#!/usr/bin/python +import sys +import os +import os.path +import subprocess + +def hook(project, hooktype, file, *args, **kwargs): + """ + project should be the projectcode of any project. + hooktype should be precommit, postcommit, preupdate or postupdate. + file should be the absolute path of the file. + + Other arguments depend on the hooktype: + precommit should have "author" and "message" as arguments. + postcommit should have "success" as arguments. + preupdate and postupdate have no additional arguments. + + Return value depends on the hooktype: + precommit returns an array of strings indicating what files to commit . + preupdate returns an array of strings indicating what files to update. + postcommit and postupdate return unit. + + """ + try: + activehook = __import__(project, globals(), locals(), []) + if (hasattr(activehook, 'hook') and callable(activehook.hook)): + return activehook.hook(hooktype, file, *args, **kwargs) + else: + return [] + except ImportError: + print "Failed to import hook (%s)" % project + pass + except Exception, e: + print "Exception in project (%s) hook (%s) for file (%s): %s" % (project, hooktype, file, e) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |