Merge lp:~ken-brotherton/boots/localization into lp:boots

Proposed by KenBrotherton
Status: Rejected
Rejected by: Max Goodhart
Proposed branch: lp:~ken-brotherton/boots/localization
Merge into: lp:boots
Diff against target: 1071 lines (+416/-69)
26 files modified
boots.py (+1/-1)
boots/api/errors.py (+2/-2)
boots/api/nodes/node.py (+36/-2)
boots/app/client_config.py (+19/-15)
boots/lib/console.py (+8/-4)
boots/lib/hook.py (+2/-2)
boots/lib/lingos/bash_external.py (+1/-1)
boots/lib/lingos/external.py (+1/-1)
boots/lib/lingos/lingo.py (+1/-1)
boots/lib/lingos/lisp/builtins.py (+7/-3)
boots/lib/lingos/lisp/lexer.py (+6/-2)
boots/lib/lingos/lisp/lisp.py (+7/-3)
boots/lib/lingos/lisp/objects.py (+10/-6)
boots/lib/lingos/lisp/parser.py (+6/-2)
boots/lib/lingos/piped_sql.py (+10/-6)
boots/lib/lingos/python.py (+1/-1)
boots/lib/lingos/sql.py (+1/-1)
boots/lib/ui/components/help.py (+37/-2)
boots/lib/ui/components/metacommands.py (+6/-2)
boots/lib/ui/generic.py (+2/-7)
boots/lib/ui/plain.py (+8/-4)
localizations/README.txt (+22/-0)
localizations/createpots.sh (+3/-0)
localizations/pot.cms (+206/-0)
localizations/potfiles.txt (+12/-0)
setup.py (+1/-1)
To merge this branch: bzr merge lp:~ken-brotherton/boots/localization
Reviewer Review Type Date Requested Status
Max Goodhart Needs Fixing
David Rosenbaum Approve
Review via email: mp+19918@code.launchpad.net
To post a comment you must log in.
Revision history for this message
KenBrotherton (ken-brotherton) wrote :

Please ignore prev prop, it was empty. hehe. Have added localization to the code.

80. By Ken Brotherton <kennyb@capstone11>

fixed localization syntax error

Revision history for this message
KenBrotherton (ken-brotherton) wrote :

Have fixed the syntax error. should be good to go.

Revision history for this message
David Rosenbaum (davidjrosenbaum) wrote :

Merging.

review: Approve
Revision history for this message
Max Goodhart (chromakode) wrote :

This branch is not ready!

It currently uses the localization domain "fslint", apparently ripped straight from an example. In addition, it munges already corrected headers, and steps on the definition of is_interactive in boots/lib/ui/generic.py -- reintroducing a bug.

Please make sure to review the complete diffs every time you merge -- and critically look at the code! This was a bit sloppy.

review: Needs Fixing
Revision history for this message
Max Goodhart (chromakode) wrote :

I tried creating a reverse commit of this merge, but because the commit was immediately followed by more header changes, the undo commit had ~20 conflicts. The easiest way to fix this was to simply uncommit the last 3 commits and redo David's last two commits. I then forced those changes, overwriting lp:boots. This means that if you've pulled lp:boots since, you'll need to force the pull with --overwrite (WARNING: this will remove any commits you've added locally. Make sure you won't lose any data before proceeding, and only do it if bzr pull gives an error first).

(David -- you put a GPL header on constructors.py, rather than LGPL. I assumed this was a mistake, and corrected it.)

Revision history for this message
KenBrotherton (ken-brotherton) wrote :

Ripped straight from an example? Munges? Steps on? Can you be more
specific? All the testing that I did showed no problems.

On Sat, 2010-02-27 at 04:35 +0000, Chromakode wrote:
> Review: Needs Fixing
> This branch is not ready!
>
> It currently uses the localization domain "fslint", apparently ripped straight from an example. In addition, it munges already corrected headers, and steps on the definition of is_interactive in boots/lib/ui/generic.py -- reintroducing a bug.
>
> Please make sure to review the complete diffs every time you merge -- and critically look at the code! This was a bit sloppy.

--

*You can find me on IM as well
bedlamoid (Yahoo,AIM, MSN)
ken.brotherton@gmail (GTalk)
http://www.myspace.com/broken_broken
http://www.facebook.com/people/Ken-Brotherton/691662047

Revision history for this message
Max Goodhart (chromakode) wrote :

> Ripped straight from an example?

Googling "gettext fslint" yields this tutorial: http://www.pixelbeat.org/programming/i18n.html

The code in this branch matches the tutorial in using "fslint" as the gettext domain. If you had read this tutorial closely, at the top of the page, you'd have seen that "domain=fslint" accords to "your app".

Did you read the gettext module documentation before writing this code? http://docs.python.org/library/gettext.html

This section shows a much better approach for using the gettext module: http://docs.python.org/library/gettext.html#localizing-your-application

Please make those changes and resubmit your merge proposal.

> Munges? Steps on? Can you be more specific? All the testing that I did showed no problems.

The headers will already corrected by Andreas, whose branch I already merged. You were not assigned that task.

In addition, if you look at the diff, it reverts the definition of the "is_interactive" function in boots/lib/ui/generic.py. This is something David should have caught at merge time, and removed.

-M

Unmerged revisions

80. By Ken Brotherton <kennyb@capstone11>

fixed localization syntax error

79. By Ken Brotherton <kennyb@capstone11>

added localization

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'boots.py'
--- boots.py 2010-02-17 03:49:02 +0000
+++ boots.py 2010-02-23 04:05:24 +0000
@@ -2,7 +2,7 @@
2# Boots Client2# Boots Client
3# www.launchpad.net/boots3# www.launchpad.net/boots
4# www.launchpad.net/drizzle4# www.launchpad.net/drizzle
5# boots.py5# boots/boots.py
6#6#
7# ##### BEGIN LICENSE BLOCK #####7# ##### BEGIN LICENSE BLOCK #####
8# Version: MPL 1.18# Version: MPL 1.1
99
=== modified file 'boots/api/errors.py'
--- boots/api/errors.py 2010-02-20 23:22:10 +0000
+++ boots/api/errors.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# errors.py 4# boots/api/errors.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -36,4 +36,4 @@
3636
37class ConsoleError(BootsError):37class ConsoleError(BootsError):
38 """Errors to be displayed to be displayed on the console"""38 """Errors to be displayed to be displayed on the console"""
39 pass
40\ No newline at end of file39\ No newline at end of file
40 pass
4141
=== modified file 'boots/api/nodes/node.py'
--- boots/api/nodes/node.py 2010-02-21 03:57:45 +0000
+++ boots/api/nodes/node.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,41 @@
1# Boots API
2# www.launchpad.net/boots
3# www.launchpad.net/drizzle
4# boots/api/nodes/node.py
5#
6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.1
8#
9# The contents of this file are subject to the Mozilla Public License
10# Version 1.1 (the "License"); you may not use this file except in
11# compliance with the License. You may obtain a copy of the License at
12# http://www.mozilla.org/MPL/
13#
14# Software distributed under the License is distributed on an "AS IS"
15# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
16# License for the specific language governing rights and limitations
17# under the License.
18#
19# The Original Code is Boots Client code.
20#
21# The Initial Developer of the Original Code is Clark Boylan, Ken
22# Brotherton, Max Goodman, Victoria Lewis, David Rosenbaum, and Andreas
23# Turriff. Portions created by Clark Boylan, Ken Brotherton, Max Goodman,
24# Victoria Lewis, David Rosenbaum, and Andreas Turriff are Copyright (C)
25# 2009. All Rights Reserved.
26#
27# Contributor(s):
28#
29# ##### END LICENSE BLOCK #####
30
1from Queue import Queue31from Queue import Queue
2from itertools import chain, tee, repeat32from itertools import chain, tee, repeat
3from threading import Thread, Event, Lock33from threading import Thread, Event, Lock
4from types import GeneratorType34from types import GeneratorType
35import gettext
36gettext.bindtextdomain("fslint", "/usr/share/locale") #sys default used if localedir=None
37gettext.textdomain("fslint")
38_ = gettext.gettext
539
6def catch_exceptions(iterable):40def catch_exceptions(iterable):
7 try:41 try:
@@ -441,12 +475,12 @@
441def test():475def test():
442 def wait(x):476 def wait(x):
443 import time477 import time
444 print "waiting: {0}".format(x)478 print _("waiting")+": {0}".format(x)
445 time.sleep(1)479 time.sleep(1)
446 return x480 return x
447 481
448 def print_it(foo):482 def print_it(foo):
449 print "printing: {0}".format(foo)483 print _("printing")+": {0}".format(foo)
450 return foo484 return foo
451 485
452 nodes = NodeGraph.from_sequence([SyncNode(lambda x:xrange(10), name="count"),486 nodes = NodeGraph.from_sequence([SyncNode(lambda x:xrange(10), name="count"),
453487
=== modified file 'boots/app/client_config.py'
--- boots/app/client_config.py 2010-02-21 00:00:41 +0000
+++ boots/app/client_config.py 2010-02-23 04:05:24 +0000
@@ -34,6 +34,10 @@
34import optparse34import optparse
35import os35import os
36import info36import info
37import gettext
38gettext.bindtextdomain("fslint", "/usr/share/locale") #sys default used if localedir=None
39gettext.textdomain("fslint")
40_ = gettext.gettext
3741
38class ClientConfig(object):42class ClientConfig(object):
39 """Class used to read client configuration from files and the cli."""43 """Class used to read client configuration from files and the cli."""
@@ -70,17 +74,17 @@
70 action = "store",74 action = "store",
71 type = "string",75 type = "string",
72 dest = "command",76 dest = "command",
73 help = "Execute command and exit")77 help = _("Execute command and exit"))
74 self._cli_parser.add_option("-D", "--database",78 self._cli_parser.add_option("-D", "--database",
75 action = "store",79 action = "store",
76 type = "string",80 type = "string",
77 dest = "database",81 dest = "database",
78 help = "Use database")82 help = _("Use database"))
79 self._cli_parser.add_option("-f", "--script",83 self._cli_parser.add_option("-f", "--script",
80 action = "store",84 action = "store",
81 type = "string",85 type = "string",
82 dest = "script",86 dest = "script",
83 help = "Execute commands from file and exit")87 help = _("Execute commands from file and exit"))
84 self._cli_parser.add_option('-l', '--lingo',88 self._cli_parser.add_option('-l', '--lingo',
85 action = 'store',89 action = 'store',
86 type = 'string',90 type = 'string',
@@ -89,47 +93,47 @@
89 self._cli_parser.add_option("-X", "--norc",93 self._cli_parser.add_option("-X", "--norc",
90 action = "store_true",94 action = "store_true",
91 dest = "norc",95 dest = "norc",
92 help = "Do not read user configuration file")96 help = _("Do not read user configuration file"))
93 self._cli_parser.add_option("-r", "--rc",97 self._cli_parser.add_option("-r", "--rc",
94 action = "store",98 action = "store",
95 type = "string",99 type = "string",
96 dest = "rcfile",100 dest = "rcfile",
97 help = "Filename of user configuration file")101 help = _("Filename of user configuration file"))
98 self._cli_parser.add_option("-H", "--host",102 self._cli_parser.add_option("-H", "--host",
99 action = "store",103 action = "store",
100 type = "string",104 type = "string",
101 dest = "host",105 dest = "host",
102 help = "Connect to host")106 help = _("Connect to host"))
103 self._cli_parser.add_option("-p", "--port",107 self._cli_parser.add_option("-p", "--port",
104 action = "store",108 action = "store",
105 type = "int",109 type = "int",
106 dest = "port",110 dest = "port",
107 help = "Use port number")111 help = _("Use port number"))
108 self._cli_parser.add_option("-u", "--user",112 self._cli_parser.add_option("-u", "--user",
109 action = "store",113 action = "store",
110 type = "string",114 type = "string",
111 dest = "username",115 dest = "username",
112 help = "Login with username")116 help = _("Login with username"))
113 self._cli_parser.add_option("-P", "--password",117 self._cli_parser.add_option("-P", "--password",
114 action = "store",118 action = "store",
115 type = "string",119 type = "string",
116 dest = "password",120 dest = "password",
117 help = "Connect using password. If none is given, query for password")121 help = _("Connect using password. If none is given, query for password"))
118 self._cli_parser.add_option("-t", "--terminatingchar",122 self._cli_parser.add_option("-t", "--terminatingchar",
119 action = "store",123 action = "store",
120 type = "string",124 type = "string",
121 dest = "terminating_char",125 dest = "terminating_char",
122 help = "Specify the SQL statement terminating character. Default is ';'.")126 help = _("Specify the SQL statement terminating character. Default is ';'."))
123 self._cli_parser.add_option("-F", "--historyfile",127 self._cli_parser.add_option("-F", "--historyfile",
124 action = "store",128 action = "store",
125 type = "string",129 type = "string",
126 dest = "history_file",130 dest = "history_file",
127 help = "Specify file to save history to")131 help = _("Specify file to save history to"))
128 self._cli_parser.add_option("-L", "--historylength",132 self._cli_parser.add_option("-L", "--historylength",
129 action = "store",133 action = "store",
130 type = "int",134 type = "int",
131 dest = "history_length",135 dest = "history_length",
132 help = "Specify max history file length")136 help = _("Specify max history file length"))
133 137
134 def __getitem__(self, key):138 def __getitem__(self, key):
135 """Allows one to use the [] operator to get config items."""139 """Allows one to use the [] operator to get config items."""
@@ -169,11 +173,11 @@
169 except IOError:173 except IOError:
170 if filepath != info.RCFILE:174 if filepath != info.RCFILE:
171 # Only print an error if a non-default rc file was specified.175 # Only print an error if a non-default rc file was specified.
172 print("rcfile {0} not found".format(filepath))176 print("rcfile {0} "+_("not found").format(filepath))
173 except SyntaxError:177 except SyntaxError:
174 print("rcfile {0} contains a syntax error".format(filepath))178 print(_("rcfile ")+"{0} "+_("contains a syntax error").format(filepath))
175 except Exception as e:179 except Exception as e:
176 print("rcfile {0} contains an error: {1}".format(filepath, e))180 print(_("rcfile ")+"{0} "+_("contains an error:")+ " {1}".format(filepath, e))
177 return file_dict181 return file_dict
178182
179 def get_cli_conf(self):183 def get_cli_conf(self):
180184
=== modified file 'boots/lib/console.py'
--- boots/lib/console.py 2010-02-21 10:23:44 +0000
+++ boots/lib/console.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/console.py 4# boots/lib/console.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -44,6 +44,10 @@
44from boots.lib.lingos import piped_sql44from boots.lib.lingos import piped_sql
45from boots.lib.lingos import sql45from boots.lib.lingos import sql
46import sys46import sys
47import gettext
48gettext.bindtextdomain("fslint", "/usr/share/locale")
49gettext.textdomain("fslint")
50_ = gettext.gettext
4751
48# Utility function.52# Utility function.
49def iterable(obj):53def iterable(obj):
@@ -93,7 +97,7 @@
93 if lingo in self.lingos:97 if lingo in self.lingos:
94 return self.lingos[lingo].execute(command)98 return self.lingos[lingo].execute(command)
95 else:99 else:
96 return ConsoleError("Invalid lingo \"{0}\" specified.".format(lingo))100 return ConsoleError(_("Invalid lingo")+" \"{0}\" "+_("specified.").format(lingo))
97101
98 def connect(self, host, port, database):102 def connect(self, host, port, database):
99 try:103 try:
@@ -106,7 +110,7 @@
106 self.servers.append(server)110 self.servers.append(server)
107 return True111 return True
108 else:112 else:
109 error = ConsoleError("Could not connect to {0}:{1}".format(host, port))113 error = ConsoleError(_("Could not connect to")+" {0}:{1}".format(host, port))
110 self.presenter.presenter_graph.put(error)114 self.presenter.presenter_graph.put(error)
111 return False115 return False
112116
@@ -147,7 +151,7 @@
147 151
148 def quit(self):152 def quit(self):
149 if self.driver.is_interactive:153 if self.driver.is_interactive:
150 self.presenter.presenter_graph.put("Boots quit.")154 self.presenter.presenter_graph.put(_("Boots quit."))
151 155
152 self.hooks["unload"].call()156 self.hooks["unload"].call()
153 self.disconnect(None, None)157 self.disconnect(None, None)
154158
=== modified file 'boots/lib/hook.py'
--- boots/lib/hook.py 2010-02-21 10:04:23 +0000
+++ boots/lib/hook.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/hook.py 4# boots/lib/hook.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -59,4 +59,4 @@
59 else:59 else:
60 dead_refs.add(callback)60 dead_refs.add(callback)
61 self.callbacks -= dead_refs61 self.callbacks -= dead_refs
62
63\ No newline at end of file62\ No newline at end of file
63
6464
=== modified file 'boots/lib/lingos/bash_external.py'
--- boots/lib/lingos/bash_external.py 2010-02-08 00:06:50 +0000
+++ boots/lib/lingos/bash_external.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/python.py4# boots/lib/lingos/python.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
88
=== modified file 'boots/lib/lingos/external.py'
--- boots/lib/lingos/external.py 2010-02-08 19:04:36 +0000
+++ boots/lib/lingos/external.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/python.py4# boots/lib/lingos/python.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
88
=== modified file 'boots/lib/lingos/lingo.py'
--- boots/lib/lingos/lingo.py 2010-02-21 10:11:22 +0000
+++ boots/lib/lingos/lingo.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/lingo.py4# boots/lib/lingos/lingo.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
88
=== modified file 'boots/lib/lingos/lisp/builtins.py'
--- boots/lib/lingos/lisp/builtins.py 2010-01-31 06:48:28 +0000
+++ boots/lib/lingos/lisp/builtins.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/lisp/builtins.py4# boots/lib/lingos/lisp/builtins.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -31,6 +31,10 @@
3131
32from boots.lib.lingos.lisp import objects32from boots.lib.lingos.lisp import objects
33import sys33import sys
34import gettext
35gettext.bindtextdomain("fslint", "/usr/share/locale")
36gettext.textdomain("fslint")
37_ = gettext.gettext
3438
35nil = objects.Null()39nil = objects.Null()
36t = objects.T()40t = objects.T()
@@ -65,7 +69,7 @@
65 elif isinstance(s, objects.String):69 elif isinstance(s, objects.String):
66 return objects.Integer(len(s.python_string()))70 return objects.Integer(len(s.python_string()))
67 else:71 else:
68 raise TypeError('Expected a cons, nil or a string')72 raise TypeError(_('Expected a cons, nil or a string'))
6973
70def elt_function(s, i):74def elt_function(s, i):
71 """Returns the ith element of the sequence s."""75 """Returns the ith element of the sequence s."""
@@ -74,7 +78,7 @@
74 elif isinstance(s, objects.String):78 elif isinstance(s, objects.String):
75 return s.python_string()[i.python_integer()]79 return s.python_string()[i.python_integer()]
76 else:80 else:
77 raise TypeError('Expected a cons or string')81 raise TypeError(_('Expected a cons or string'))
7882
79def gensym_function():83def gensym_function():
80 """Returns a unique symbol that will never be the same as any other symbol even if it has the same name."""84 """Returns a unique symbol that will never be the same as any other symbol even if it has the same name."""
8185
=== modified file 'boots/lib/lingos/lisp/lexer.py'
--- boots/lib/lingos/lisp/lexer.py 2010-01-22 05:58:25 +0000
+++ boots/lib/lingos/lisp/lexer.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/lisp/lexer.py4# boots/lib/lingos/lisp/lexer.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -30,6 +30,10 @@
30# Defines the lisp lexer.30# Defines the lisp lexer.
3131
32import ply.lex as lex32import ply.lex as lex
33import gettext
34gettext.bindtextdomain("fslint", "/usr/share/locale")
35gettext.textdomain("fslint")
36_ = gettext.gettext
3337
34tokens = ('INTEGER', 'STRING', 'SYMBOL', 'QUOTE', 'LEFT_PAREN', 'RIGHT_PAREN')38tokens = ('INTEGER', 'STRING', 'SYMBOL', 'QUOTE', 'LEFT_PAREN', 'RIGHT_PAREN')
3539
@@ -42,7 +46,7 @@
42t_ignore = ' \t\n'46t_ignore = ' \t\n'
4347
44def t_error(t):48def t_error(t):
45 print('illegal character {0} found'.format(t.value))49 print(_('illegal character')+' {0} '+_('found').format(t.value))
46 token.lexer.skip(1)50 token.lexer.skip(1)
4751
48lexer = lex.lex()52lexer = lex.lex()
4953
=== modified file 'boots/lib/lingos/lisp/lisp.py'
--- boots/lib/lingos/lisp/lisp.py 2010-02-07 08:52:29 +0000
+++ boots/lib/lingos/lisp/lisp.py 2010-02-23 04:05:24 +0000
@@ -2,7 +2,7 @@
2# Boots Client2# Boots Client
3# www.launchpad.net/boots3# www.launchpad.net/boots
4# www.launchpad.net/drizzle4# www.launchpad.net/drizzle
5# lib/lingos/lisp/lisp.py5# boots/lib/lingos/lisp/lisp.py
6#6#
7# ##### BEGIN LICENSE BLOCK #####7# ##### BEGIN LICENSE BLOCK #####
8# Version: MPL 1.18# Version: MPL 1.1
@@ -54,6 +54,10 @@
54from boots.lib.lingos.lisp import parser54from boots.lib.lingos.lisp import parser
55import re55import re
56import readline56import readline
57import gettext
58gettext.bindtextdomain("fslint", "/usr/share/locale")
59gettext.textdomain("fslint")
60_ = gettext.gettext
5761
58def input_complete(string):62def input_complete(string):
59 """Returns string if string is a complete lisp expression. Otherwise, None is returned."""63 """Returns string if string is a complete lisp expression. Otherwise, None is returned."""
@@ -64,7 +68,7 @@
64 paren_level = left_parens - right_parens68 paren_level = left_parens - right_parens
6569
66 if paren_level < 0:70 if paren_level < 0:
67 raise SyntaxError('unmatched closing ")"')71 raise SyntaxError(_('unmatched closing')+' ")"')
68 elif paren_level > 0:72 elif paren_level > 0:
69 return None73 return None
70 else:74 else:
@@ -83,7 +87,7 @@
83 if isinstance(stream, file):87 if isinstance(stream, file):
84 stream = stream.readline88 stream = stream.readline
85 elif not callable(stream):89 elif not callable(stream):
86 raise TypeError('{0} is not a stream or a callable'.format(stream))90 raise TypeError('{0} '+_('is not a stream or a callable').format(stream))
87 # Read lines until all open lisp expressions have been closed.91 # Read lines until all open lisp expressions have been closed.
88 while True:92 while True:
89 line = stream()93 line = stream()
9094
=== modified file 'boots/lib/lingos/lisp/objects.py'
--- boots/lib/lingos/lisp/objects.py 2010-01-31 06:34:57 +0000
+++ boots/lib/lingos/lisp/objects.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/lisp/objects.py4# boots/lib/lingos/lisp/objects.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -32,6 +32,10 @@
32import abc32import abc
33import copy33import copy
34import sys34import sys
35import gettext
36gettext.bindtextdomain("fslint", "/usr/share/locale")
37gettext.textdomain("fslint")
38_ = gettext.gettext
3539
36_gensym_count = 140_gensym_count = 1
37_symbols = {}41_symbols = {}
@@ -104,7 +108,7 @@
104 else_expression = car(cdr(cdr(cdr(self))))108 else_expression = car(cdr(cdr(cdr(self))))
105109
106 if then_expression is Null() or cdr(cdr(cdr(cdr(self)))) is not Null():110 if then_expression is Null() or cdr(cdr(cdr(cdr(self)))) is not Null():
107 raise SyntaxError('wrong number of arguments for if special form {0}'.format(self))111 raise SyntaxError(_('wrong number of arguments for if special form')+' {0}'.format(self))
108112
109 if condition_expression.evaluate(environment) != Null():113 if condition_expression.evaluate(environment) != Null():
110 return then_expression.evaluate(environment)114 return then_expression.evaluate(environment)
@@ -123,7 +127,7 @@
123 values = arguments[2::2]127 values = arguments[2::2]
124128
125 if len(symbols) != len(values) or len(symbols) == 0:129 if len(symbols) != len(values) or len(symbols) == 0:
126 raise SyntaxError('The number of symbols must equal the number of values and must be non-zero')130 raise SyntaxError(_('The number of symbols must equal the number of values and must be non-zero'))
127131
128 for symbol, value in zip(symbols, values):132 for symbol, value in zip(symbols, values):
129 value = value.evaluate(environment)133 value = value.evaluate(environment)
@@ -137,7 +141,7 @@
137 else: # Handle function calls.141 else: # Handle function calls.
138 function = self.car.evaluate(environment)142 function = self.car.evaluate(environment)
139 if not isinstance(function, Lambda):143 if not isinstance(function, Lambda):
140 raise TypeError('Expected a function')144 raise TypeError(_('Expected a function'))
141 else:145 else:
142 return function.call((argument.evaluate(environment) for argument in self.python_list()[1:]), environment)146 return function.call((argument.evaluate(environment) for argument in self.python_list()[1:]), environment)
143147
@@ -196,7 +200,7 @@
196 # def __delitem__(self, symbol):200 # def __delitem__(self, symbol):
197 # """Removes the first binding found for symbol. Returns True if the symbol is found and False otherwise."""201 # """Removes the first binding found for symbol. Returns True if the symbol is found and False otherwise."""
198 # if not isinstance(symbol, Symbol):202 # if not isinstance(symbol, Symbol):
199 # raise TypeError('Expected a symbol')203 # raise TypeError(_('Expected a symbol'))
200 204
201 # if symbol in self._environment:205 # if symbol in self._environment:
202 # self._environment[symbol].pop()206 # self._environment[symbol].pop()
@@ -223,7 +227,7 @@
223 def pop(self):227 def pop(self):
224 """Removes the innermost scope and returns a dictionary that corresponds to its bindings."""228 """Removes the innermost scope and returns a dictionary that corresponds to its bindings."""
225 if len(self._scopes) <= 1:229 if len(self._scopes) <= 1:
226 raise RuntimeError('Cannot pop the innermost scope because then no scopes would remain')230 raise RuntimeError(_('Cannot pop the innermost scope because then no scopes would remain'))
227 symbols = self._scopes.pop()231 symbols = self._scopes.pop()
228 232
229 for symbol in symbols:233 for symbol in symbols:
230234
=== modified file 'boots/lib/lingos/lisp/parser.py'
--- boots/lib/lingos/lisp/parser.py 2010-01-23 23:32:39 +0000
+++ boots/lib/lingos/lisp/parser.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/lisp/parser.py4# boots/lib/lingos/lisp/parser.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -33,6 +33,10 @@
33from boots.lib.lingos.lisp import builtins33from boots.lib.lingos.lisp import builtins
34from boots.lib.lingos.lisp import objects34from boots.lib.lingos.lisp import objects
35import ply.yacc as yacc35import ply.yacc as yacc
36import gettext
37gettext.bindtextdomain("fslint", "/usr/share/locale")
38gettext.textdomain("fslint")
39_ = gettext.gettext
3640
37def p_expression_integer(p):41def p_expression_integer(p):
38 'expression : INTEGER'42 'expression : INTEGER'
@@ -67,7 +71,7 @@
67 p[0] = objects.Cons(p[1], p[2])71 p[0] = objects.Cons(p[1], p[2])
6872
69def p_error(p):73def p_error(p):
70 print('syntax error')74 print(_('syntax error'))
7175
72# Disable debugging output and caching of parse tables.76# Disable debugging output and caching of parse tables.
73parser = yacc.yacc(debug = 0, write_tables = 0)77parser = yacc.yacc(debug = 0, write_tables = 0)
7478
=== modified file 'boots/lib/lingos/piped_sql.py'
--- boots/lib/lingos/piped_sql.py 2010-02-21 03:57:45 +0000
+++ boots/lib/lingos/piped_sql.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/sql.py4# boots/lib/lingos/piped_sql.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -32,6 +32,10 @@
32from boots.lib.lingos import lingo32from boots.lib.lingos import lingo
33from boots.lib.lingos import sql33from boots.lib.lingos import sql
34import re34import re
35import gettext
36gettext.bindtextdomain("fslint", "/usr/share/locale")
37gettext.textdomain("fslint")
38_ = gettext.gettext
3539
36# FIXME: These node constructors should probably moved into the API so40# FIXME: These node constructors should probably moved into the API so
37# they can be used in scripts.41# they can be used in scripts.
@@ -65,14 +69,14 @@
65def register(name, constructor):69def register(name, constructor):
66 """Register a constructor that is used to contruct nodes when that specified name is used."""70 """Register a constructor that is used to contruct nodes when that specified name is used."""
67 if name in _constructors:71 if name in _constructors:
68 raise KeyError('A constructor with name {0} already exists'.format(name))72 raise KeyError(_('A constructor with name')+' {0} '+_('already exists').format(name))
69 73
70 _constructors[name] = (arguments, constructor)74 _constructors[name] = (arguments, constructor)
7175
72def construct(name, *arguments):76def construct(name, *arguments):
73 """Contructs a node using the given name and arguments."""77 """Contructs a node using the given name and arguments."""
74 if name not in _constructors:78 if name not in _constructors:
75 raise KeyError('There is no constructor with the name {0}.'.format(name))79 raise KeyError(_('There is no constructor with the name')+' {0}.'.format(name))
76 80
77 return _constructors[name](*arguments)81 return _constructors[name](*arguments)
7882
@@ -87,7 +91,7 @@
87 match = clause_re.match(clause_string)91 match = clause_re.match(clause_string)
8892
89 if not match:93 if not match:
90 raise SyntaxError('{0} is not in the correct function call syntax'.format(clause_string))94 raise SyntaxError('{0} '+_('is not in the correct function call syntax').format(clause_string))
9195
92 constructor_call = match.group('constructor_call').strip()96 constructor_call = match.group('constructor_call').strip()
93 output_file = match.group('output_file')97 output_file = match.group('output_file')
@@ -98,7 +102,7 @@
98 match = constructor_call_re.match(constructor_string)102 match = constructor_call_re.match(constructor_string)
99103
100 if not match:104 if not match:
101 raise SyntaxError('{0} is not in the correct function call syntax'.format(constructor_string))105 raise SyntaxError('{0} '+_('is not in the correct function call syntax').format(constructor_string))
102 106
103 name = match.group('name')107 name = match.group('name')
104 arguments = match.group('arguments')108 arguments = match.group('arguments')
@@ -137,7 +141,7 @@
137 # SQL is only allowed for the first node.141 # SQL is only allowed for the first node.
138 if sql:142 if sql:
139 if not first_node:143 if not first_node:
140 raise SyntaxError('SQL is only permitted for the first clause')144 raise SyntaxError(_('SQL is only permitted for the first clause'))
141 145
142 # FIXME: Add support for multiple servers here. Currently only the first server146 # FIXME: Add support for multiple servers here. Currently only the first server
143 # is used.147 # is used.
144148
=== modified file 'boots/lib/lingos/python.py'
--- boots/lib/lingos/python.py 2010-02-20 23:42:07 +0000
+++ boots/lib/lingos/python.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/python.py4# boots/lib/lingos/python.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
88
=== modified file 'boots/lib/lingos/sql.py'
--- boots/lib/lingos/sql.py 2010-02-16 00:38:41 +0000
+++ boots/lib/lingos/sql.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/lingos/sql.py4# boots/lib/lingos/sql.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
88
=== modified file 'boots/lib/ui/components/help.py'
--- boots/lib/ui/components/help.py 2010-02-07 09:29:31 +0000
+++ boots/lib/ui/components/help.py 2010-02-23 04:05:24 +0000
@@ -1,4 +1,39 @@
1# Boots Client
2# www.launchpad.net/boots
3# www.launchpad.net/drizzle
4# boots/lib/ui/components/help.py
5#
6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.1
8#
9# The contents of this file are subject to the Mozilla Public License
10# Version 1.1 (the "License"); you may not use this file except in
11# compliance with the License. You may obtain a copy of the License at
12# http://www.mozilla.org/MPL/
13#
14# Software distributed under the License is distributed on an "AS IS"
15# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
16# License for the specific language governing rights and limitations
17# under the License.
18#
19# The Original Code is Boots Client code.
20#
21# The Initial Developer of the Original Code is Clark Boylan, Ken
22# Brotherton, Max Goodman, Victoria Lewis, David Rosenbaum, and Andreas
23# Turriff. Portions created by Clark Boylan, Ken Brotherton, Max Goodman,
24# Victoria Lewis, David Rosenbaum, and Andreas Turriff are Copyright (C)
25# 2009. All Rights Reserved.
26#
27# Contributor(s):
28#
29# ##### END LICENSE BLOCK #####
1# Utility function30# Utility function
31
32import gettext
33gettext.bindtextdomain("fslint", "/usr/share/locale")
34gettext.textdomain("fslint")
35_ = gettext.gettext
36
2def issubseq(seq, seq2):37def issubseq(seq, seq2):
3 """Determines if the elements the sequence seq form a subsequence of the sequence seq2."""38 """Determines if the elements the sequence seq form a subsequence of the sequence seq2."""
4 if len(seq) == 0:39 if len(seq) == 0:
@@ -29,7 +64,7 @@
29 def format(self):64 def format(self):
30 """Returns a string that represents this topic in human readable form as65 """Returns a string that represents this topic in human readable form as
31 described in detail above."""66 described in detail above."""
32 text = "{0.title}\n\n{0.description}\n\nSee also: {0.see_also}".format(self)67 text = "{0.title}\n\n{0.description}\n\n"+_("See also: ") + "{0.see_also}".format(self)
33 return text68 return text
34 69
35 def format_index(self):70 def format_index(self):
@@ -63,7 +98,7 @@
63 assert isinstance(item, str)98 assert isinstance(item, str)
64 return query99 return query
65 else:100 else:
66 raise TypeError('query object {0} is not a string or tuple of strings'.format(query))101 raise TypeError(_('query object')+ ' {0} '+ _('is not a string or tuple of strings').format(query))
67 102
68 def _ensure_key(self, key):103 def _ensure_key(self, key):
69 """Creates a new subtopic that key maps to if none exists."""104 """Creates a new subtopic that key maps to if none exists."""
70105
=== modified file 'boots/lib/ui/components/metacommands.py'
--- boots/lib/ui/components/metacommands.py 2010-02-07 01:52:52 +0000
+++ boots/lib/ui/components/metacommands.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/console.py 4# boots/lib/ui/components/metacommands.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -29,6 +29,10 @@
29# ##### END LICENSE BLOCK #####29# ##### END LICENSE BLOCK #####
3030
31import warnings31import warnings
32import gettext
33gettext.bindtextdomain("fslint", "/usr/share/locale") #sys default used if localedir=None
34gettext.textdomain("fslint")
35_ = gettext.gettext
3236
33def parse_metacommand(commandstring):37def parse_metacommand(commandstring):
34 """This function wraps str.split() for metacommands38 """This function wraps str.split() for metacommands
@@ -50,7 +54,7 @@
50 # FIXME: Issue warning through the UI using ui.print54 # FIXME: Issue warning through the UI using ui.print
51 # FIXME: Determine the offending command(s) (set.intersect?)55 # FIXME: Determine the offending command(s) (set.intersect?)
52 # FIXME: Print offending commands56 # FIXME: Print offending commands
53 warnings.warn("Conflicts between metacommands detected.")57 warnings.warn(_("Conflicts between metacommands detected."))
54 self.names |= newnames58 self.names |= newnames
5559
56class MetaCommands(object):60class MetaCommands(object):
5761
=== modified file 'boots/lib/ui/generic.py'
--- boots/lib/ui/generic.py 2010-02-22 19:33:02 +0000
+++ boots/lib/ui/generic.py 2010-02-23 04:05:24 +0000
@@ -31,7 +31,6 @@
31two pieces, each classes, the StreamDriver and StreamPresenter."""31two pieces, each classes, the StreamDriver and StreamPresenter."""
3232
33import sys33import sys
34import os
35import StringIO34import StringIO
3635
37class StreamDriver(object):36class StreamDriver(object):
@@ -57,12 +56,8 @@
57 except EOFError:56 except EOFError:
58 return57 return
59 58
60 @property59 def unload(self):
61 def is_interactive(self):60 pass
62 if hasattr(os, "isatty") and hasattr(self.stream, "fileno"):
63 return os.isatty(self.stream.fileno())
64 else:
65 return False
6661
67class StreamPresenter(object):62class StreamPresenter(object):
68 """StreamPresenters write out boots results to streams, stdout for63 """StreamPresenters write out boots results to streams, stdout for
6964
=== modified file 'boots/lib/ui/plain.py'
--- boots/lib/ui/plain.py 2010-02-21 10:23:44 +0000
+++ boots/lib/ui/plain.py 2010-02-23 04:05:24 +0000
@@ -1,7 +1,7 @@
1# Boots Client1# Boots Client
2# www.launchpad.net/boots2# www.launchpad.net/boots
3# www.launchpad.net/drizzle3# www.launchpad.net/drizzle
4# lib/ui/plain.py4# boots/lib/ui/plain.py
5#5#
6# ##### BEGIN LICENSE BLOCK #####6# ##### BEGIN LICENSE BLOCK #####
7# Version: MPL 1.17# Version: MPL 1.1
@@ -34,6 +34,10 @@
34import os34import os
35import time35import time
36import readline36import readline
37import gettext
38gettext.bindtextdomain("fslint", "/usr/share/locale") #sys default used if localedir=None
39gettext.textdomain("fslint")
40_ = gettext.gettext
37 41
38from boots.api.nodes.node import NodeGraph, SyncNode42from boots.api.nodes.node import NodeGraph, SyncNode
39from boots.lib.ui.components.metacommands import MetaCommands, parse_metacommand43from boots.lib.ui.components.metacommands import MetaCommands, parse_metacommand
@@ -149,7 +153,7 @@
149 dashes = map(lambda x: "-"*(x+2), max_widths)153 dashes = map(lambda x: "-"*(x+2), max_widths)
150 sep_line = "+" + "+".join(dashes) + "+\n"154 sep_line = "+" + "+".join(dashes) + "+\n"
151 current_time = time.time()155 current_time = time.time()
152 info_line = "{0} rows in set ({1:.2f} seconds).\n".format(len(self.buffer),156 info_line = "{0} " +_("rows in set")+" ({1:.2f} "+ _("seconds")+".\n".format(len(self.buffer),
153 current_time - result["begin_time"])157 current_time - result["begin_time"])
154 names = (column[0] for column in self.last_desc)158 names = (column[0] for column in self.last_desc)
155 sys.stdout.write(sep_line)159 sys.stdout.write(sep_line)
@@ -163,7 +167,7 @@
163 self.buffer = []167 self.buffer = []
164 else:168 else:
165 if isinstance(result, Exception):169 if isinstance(result, Exception):
166 sys.stdout.write("ERROR ")170 sys.stdout.write(_("ERROR "))
167 sys.stdout.write(" :: ".join(map(str, result.args)))171 sys.stdout.write(" :: ".join(map(str, result.args)))
168 else:172 else:
169 sys.stdout.write(str(result))173 sys.stdout.write(str(result))
@@ -182,4 +186,4 @@
182 if lingo in self.console.lingos:186 if lingo in self.console.lingos:
183 self.lingo = lingo187 self.lingo = lingo
184 else:188 else:
185 self.present("The specified lingo \"{0}\" does not exist.".format(lingo))189 self.present(_("The specified lingo")+" \"{0}\" "+_("does not exist.").format(lingo))
186190
=== added directory 'localizations'
=== added file 'localizations/README.txt'
--- localizations/README.txt 1970-01-01 00:00:00 +0000
+++ localizations/README.txt 2010-02-23 04:05:24 +0000
@@ -0,0 +1,22 @@
1========When adding code that outputs a string========
21) Add (if not present already) to the import section of the .py file
3#=========
4import gettext
5gettext.bindtextdomain("fslint", "/usr/share/locale") #sys default used if localedir=None
6gettext.textdomain("fslint")
7_ = gettext.gettext
8#=========
9And then wrap all output strings with _("...").
10You should do this so that if you are using dynamicly created content, that created content is not part of the wrapped string.
11Ex:
12help = "Execute commands from file and exit")
13should be wrapped as such:
14help = _("Execute commands from file and exit"))
15Ex:
16print("rcfile {0} contains a syntax error".format(filepath))
17should be wrapped as such:
18print(_("rcfile ")+"{0} "+_("contains a syntax error").format(filepath))
19
202) Add your file path to the /boots/localizations/potfiles.txt file.
213) Generate the updated .pot file by running the /boots/localization/createpots.sh script. This will overwrite the existing pot.cms file. Any prevously generated .po .mo files can then be updated from this new file.
224) Upload new pot file to the launchpad localization section for creation or updating of .po files. (more on this later --ken)
023
=== added file 'localizations/createpots.sh'
--- localizations/createpots.sh 1970-01-01 00:00:00 +0000
+++ localizations/createpots.sh 2010-02-23 04:05:24 +0000
@@ -0,0 +1,3 @@
1#!/bin/bash
2xgettext --from-code=utf-8 --keyword=tr --default-domain=cms --output=pot.cms --files-from=potfiles.txt
3
04
=== added file 'localizations/pot.cms'
--- localizations/pot.cms 1970-01-01 00:00:00 +0000
+++ localizations/pot.cms 2010-02-23 04:05:24 +0000
@@ -0,0 +1,206 @@
1# SOME DESCRIPTIVE TITLE.
2# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3# This file is distributed under the same license as the PACKAGE package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5#
6#, fuzzy
7msgid ""
8msgstr ""
9"Project-Id-Version: PACKAGE VERSION\n"
10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2010-02-22 13:01-0800\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=CHARSET\n"
17"Content-Transfer-Encoding: 8bit\n"
18
19#: ../boots/api/nodes/node.py:478
20msgid "waiting"
21msgstr ""
22
23#: ../boots/api/nodes/node.py:483
24msgid "printing"
25msgstr ""
26
27#: ../boots/app/client_config.py:77
28msgid "Execute command and exit"
29msgstr ""
30
31#: ../boots/app/client_config.py:82
32msgid "Use database"
33msgstr ""
34
35#: ../boots/app/client_config.py:87
36msgid "Execute commands from file and exit"
37msgstr ""
38
39#: ../boots/app/client_config.py:96
40msgid "Do not read user configuration file"
41msgstr ""
42
43#: ../boots/app/client_config.py:101
44msgid "Filename of user configuration file"
45msgstr ""
46
47#: ../boots/app/client_config.py:106
48msgid "Connect to host"
49msgstr ""
50
51#: ../boots/app/client_config.py:111
52msgid "Use port number"
53msgstr ""
54
55#: ../boots/app/client_config.py:116
56msgid "Login with username"
57msgstr ""
58
59#: ../boots/app/client_config.py:121
60msgid "Connect using password. If none is given, query for password"
61msgstr ""
62
63#: ../boots/app/client_config.py:126
64msgid "Specify the SQL statement terminating character. Default is ';'."
65msgstr ""
66
67#: ../boots/app/client_config.py:131
68msgid "Specify file to save history to"
69msgstr ""
70
71#: ../boots/app/client_config.py:136
72msgid "Specify max history file length"
73msgstr ""
74
75#: ../boots/app/client_config.py:176
76msgid "not found"
77msgstr ""
78
79#: ../boots/app/client_config.py:178 ../boots/app/client_config.py:180
80msgid "rcfile "
81msgstr ""
82
83#: ../boots/app/client_config.py:178
84msgid "contains a syntax error"
85msgstr ""
86
87#: ../boots/app/client_config.py:180
88msgid "contains an error:"
89msgstr ""
90
91#: ../boots/lib/console.py:100
92msgid "Invalid lingo"
93msgstr ""
94
95#: ../boots/lib/console.py:100
96msgid "specified."
97msgstr ""
98
99#: ../boots/lib/console.py:113
100msgid "Could not connect to"
101msgstr ""
102
103#: ../boots/lib/console.py:154
104msgid "Boots quit."
105msgstr ""
106
107#: ../boots/lib/ui/plain.py:156
108msgid "rows in set"
109msgstr ""
110
111#: ../boots/lib/ui/plain.py:156
112msgid "seconds"
113msgstr ""
114
115#: ../boots/lib/ui/plain.py:170
116msgid "ERROR "
117msgstr ""
118
119#: ../boots/lib/ui/plain.py:189
120msgid "The specified lingo"
121msgstr ""
122
123#: ../boots/lib/ui/plain.py:189
124msgid "does not exist."
125msgstr ""
126
127#: ../boots/lib/ui/components/help.py:67
128msgid "See also: "
129msgstr ""
130
131#: ../boots/lib/ui/components/help.py:101
132msgid "query object"
133msgstr ""
134
135#: ../boots/lib/ui/components/help.py:101
136msgid "is not a string or tuple of strings"
137msgstr ""
138
139#: ../boots/lib/ui/components/metacommands.py:57
140msgid "Conflicts between metacommands detected."
141msgstr ""
142
143#: ../boots/lib/lingos/piped_sql.py:72
144msgid "A constructor with name"
145msgstr ""
146
147#: ../boots/lib/lingos/piped_sql.py:72
148msgid "already exists"
149msgstr ""
150
151#: ../boots/lib/lingos/piped_sql.py:79
152msgid "There is no constructor with the name"
153msgstr ""
154
155#: ../boots/lib/lingos/piped_sql.py:94 ../boots/lib/lingos/piped_sql.py:105
156msgid "is not in the correct function call syntax"
157msgstr ""
158
159#: ../boots/lib/lingos/piped_sql.py:144
160msgid "SQL is only permitted for the first clause"
161msgstr ""
162
163#: ../boots/lib/lingos/lisp/builtins.py:72
164msgid "Expected a cons, nil or a string"
165msgstr ""
166
167#: ../boots/lib/lingos/lisp/builtins.py:81
168msgid "Expected a cons or string"
169msgstr ""
170
171#: ../boots/lib/lingos/lisp/lexer.py:49
172msgid "illegal character"
173msgstr ""
174
175#: ../boots/lib/lingos/lisp/lexer.py:49
176msgid "found"
177msgstr ""
178
179#: ../boots/lib/lingos/lisp/lisp.py:71
180msgid "unmatched closing"
181msgstr ""
182
183#: ../boots/lib/lingos/lisp/lisp.py:90
184msgid "is not a stream or a callable"
185msgstr ""
186
187#: ../boots/lib/lingos/lisp/objects.py:111
188msgid "wrong number of arguments for if special form"
189msgstr ""
190
191#: ../boots/lib/lingos/lisp/objects.py:130
192msgid ""
193"The number of symbols must equal the number of values and must be non-zero"
194msgstr ""
195
196#: ../boots/lib/lingos/lisp/objects.py:144
197msgid "Expected a function"
198msgstr ""
199
200#: ../boots/lib/lingos/lisp/objects.py:230
201msgid "Cannot pop the innermost scope because then no scopes would remain"
202msgstr ""
203
204#: ../boots/lib/lingos/lisp/parser.py:74
205msgid "syntax error"
206msgstr ""
0207
=== added file 'localizations/potfiles.txt'
--- localizations/potfiles.txt 1970-01-01 00:00:00 +0000
+++ localizations/potfiles.txt 2010-02-23 04:05:24 +0000
@@ -0,0 +1,12 @@
1../boots/api/nodes/node.py
2../boots/app/client_config.py
3../boots/lib/console.py
4../boots/lib/ui/plain.py
5../boots/lib/ui/components/help.py
6../boots/lib/ui/components/metacommands.py
7../boots/lib/lingos/piped_sql.py
8../boots/lib/lingos/lisp/builtins.py
9../boots/lib/lingos/lisp/lexer.py
10../boots/lib/lingos/lisp/lisp.py
11../boots/lib/lingos/lisp/objects.py
12../boots/lib/lingos/lisp/parser.py
013
=== modified file 'setup.py'
--- setup.py 2010-02-17 03:49:02 +0000
+++ setup.py 2010-02-23 04:05:24 +0000
@@ -2,7 +2,7 @@
2# Boots Setup2# Boots Setup
3# www.launchpad.net/boots3# www.launchpad.net/boots
4# www.launchpad.net/drizzle4# www.launchpad.net/drizzle
5# setup.py5# boots/setup.py
6#6#
7# ##### BEGIN LICENSE BLOCK #####7# ##### BEGIN LICENSE BLOCK #####
8# Version: MPL 1.18# Version: MPL 1.1

Subscribers

People subscribed via source and target branches

to status/vote changes: