Merge lp:~ev/ubiquity/translated_layouts into lp:ubiquity
- translated_layouts
- Merge into trunk
Proposed by
Evan
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~ev/ubiquity/translated_layouts |
Merge into: | lp:ubiquity |
Diff against target: |
292 lines (+121/-33) 5 files modified
.bzrignore (+1/-0) d-i/make-keyboard-names (+82/-20) debian/rules (+7/-1) debian/ubiquity.install-any (+1/-0) ubiquity/components/ubi-console-setup.py (+30/-12) |
To merge this branch: | bzr merge lp:~ev/ubiquity/translated_layouts |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu Installer Team | Pending | ||
Review via email: mp+17461@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2010-01-20 12:15:00 +0000 |
3 | +++ .bzrignore 2010-01-20 23:36:15 +0000 |
4 | @@ -5,6 +5,7 @@ |
5 | ./build-stamp |
6 | debian/build |
7 | debian/files |
8 | +debian/kbdnames.gz |
9 | debian/oem-config |
10 | debian/oem-config-check |
11 | debian/oem-config-debconf |
12 | |
13 | === modified file 'd-i/make-keyboard-names' |
14 | --- d-i/make-keyboard-names 2006-10-02 18:34:01 +0000 |
15 | +++ d-i/make-keyboard-names 2010-01-20 23:36:15 +0000 |
16 | @@ -3,8 +3,12 @@ |
17 | # Derived from console-setup/Keyboard/kbdnames-maker, by Anton Zinoviev. |
18 | # Mangled to produce a Python module by Colin Watson. |
19 | |
20 | +# This needs to die in a big chemical fire. |
21 | + |
22 | use warnings 'all'; |
23 | use strict; |
24 | +use Locale::gettext; |
25 | +use POSIX; |
26 | |
27 | my $file; |
28 | |
29 | @@ -23,43 +27,101 @@ |
30 | print "# Instead of editing this file, it is better to edit the original and\n"; |
31 | print "# regenerate this.\n\n"; |
32 | |
33 | -print "models = {\n"; |
34 | +print "lang = {\n"; |
35 | +print " 'C': {\n"; |
36 | +print " 'models' : {\n"; |
37 | for my $model (sort keys %KeyboardNames::models) { |
38 | my $name = $KeyboardNames::models{$model}; |
39 | (my $modelesc = $model) =~ s/'/\\'/; |
40 | - print " '$modelesc': '$name',\n"; |
41 | + print " '$modelesc': '$name',\n"; |
42 | } |
43 | -print "}\n\n"; |
44 | -print "models_rev = {}\n"; |
45 | -print "models_rev.update(((v, k) for (k, v) in models.iteritems()))\n\n"; |
46 | +print " },\n"; |
47 | +print " 'models_rev' : {},\n"; |
48 | |
49 | my %layouts_rev; |
50 | -print "layouts = {\n"; |
51 | +print " 'layouts' : {\n"; |
52 | for my $layout (sort keys %KeyboardNames::layouts) { |
53 | my $name = $KeyboardNames::layouts{$layout}; |
54 | $layouts_rev{$name} = $layout; |
55 | (my $layoutesc = $layout) =~ s/'/\\'/g; |
56 | - print " '$layoutesc': '$name',\n"; |
57 | + print " '$layoutesc': '$name',\n"; |
58 | } |
59 | -print "}\n\n"; |
60 | -print "layouts_rev = {}\n"; |
61 | -print "layouts_rev.update(((v, k) for (k, v) in layouts.iteritems()))\n\n"; |
62 | +print " },\n"; |
63 | +print " 'layouts_rev' : {},\n"; |
64 | |
65 | -print "variants = {\n"; |
66 | +print " 'variants' : {\n"; |
67 | for my $layout (sort keys %KeyboardNames::variants) { |
68 | my $desc = $layouts_rev{$layout}; |
69 | - print " '$layout': {\n"; |
70 | + print " '$layout': {\n"; |
71 | (my $layoutesc = $desc) =~ s/'/\\'/g; |
72 | - print " '$layoutesc': '',\n"; |
73 | + print " '$layoutesc': '',\n"; |
74 | for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) { |
75 | my $variantname = $KeyboardNames::variants{$layout}{$variant}; |
76 | (my $variantesc = "$desc - $variant") =~ s/'/\\'/g; |
77 | - print " '$variantesc': '$variantname',\n"; |
78 | - } |
79 | + print " '$variantesc': '$variantname',\n"; |
80 | + } |
81 | + print " },\n"; |
82 | +} |
83 | +print " },\n"; |
84 | +print " 'variants_rev' : {},\n"; |
85 | +print " },\n"; |
86 | + |
87 | +# Make sure we output UTF-8 |
88 | +$ENV{'LC_ALL'} = "en_US.UTF-8"; |
89 | +binmode STDOUT, ":utf8"; |
90 | + |
91 | +for my $mo (</usr/share/locale/*/LC_MESSAGES/xkeyboard-config.mo>) { |
92 | + my $lang = $mo; |
93 | + $lang =~ s:/usr/share/locale/(.*)/LC_MESSAGES/xkeyboard-config.mo:$1:; |
94 | + $ENV{'LANGUAGE'} = $lang; |
95 | + setlocale(LC_ALL,""); |
96 | + |
97 | + $lang =~ s:\@:__:; |
98 | + $lang =~ s:__Latn:__latin:; # special fixup for sr |
99 | + |
100 | + my $d = Locale::gettext->domain("xkeyboard-config"); |
101 | + |
102 | + print " '$lang': {\n"; |
103 | + print " 'models': {\n"; |
104 | + for my $model (sort keys %KeyboardNames::models) { |
105 | + my $name = $KeyboardNames::models{$model}; |
106 | + (my $local_model = $d->get($model)) =~ s/'/\\'/g; |
107 | + print " u'$local_model': '$name',\n" |
108 | + } |
109 | + print " },\n"; |
110 | + print " 'models_rev' : {},\n"; |
111 | + print " 'layouts' : {\n"; |
112 | + for my $layout (sort keys %KeyboardNames::layouts) { |
113 | + my $name = $KeyboardNames::layouts{$layout}; |
114 | + my $local_layout = $d->get($layout); |
115 | + (my $layoutesc = $local_layout) =~ s/'/\\'/g; |
116 | + print " u'$layoutesc': '$name',\n"; |
117 | + } |
118 | + print " },\n"; |
119 | + print " 'layouts_rev' : {},\n"; |
120 | + print " 'variants' : {\n"; |
121 | + for my $layout (sort keys %KeyboardNames::variants) { |
122 | + my $local_desc = $d->get($layouts_rev{$layout}); |
123 | + print " '$layout': {\n"; |
124 | + (my $layoutesc = $local_desc) =~ s/'/\\'/g; |
125 | + print " u'$layoutesc': '',\n"; |
126 | + for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) { |
127 | + my $local_variant = $d->get($variant); |
128 | + my $variantname = $KeyboardNames::variants{$layout}{$variant}; |
129 | + (my $variantesc = "$local_desc - $local_variant") =~ s/'/\\'/g; |
130 | + print " u'$variantesc': '$variantname',\n"; |
131 | + } |
132 | + print " },\n"; |
133 | + } |
134 | + print " },\n"; |
135 | + print " 'variants_rev' : {},\n"; |
136 | print " },\n"; |
137 | } |
138 | -print "}\n\n"; |
139 | -print "variants_rev = {}\n"; |
140 | -print "for layoutname in variants.keys():\n"; |
141 | -print " variants_rev[layoutname] = {}\n"; |
142 | -print " variants_rev[layoutname].update(((v, k) for (k, v) in variants_rev[layoutname].iteritems()))\n"; |
143 | + |
144 | +print "}\n"; |
145 | +print "for l in lang:\n"; |
146 | +print " lang[l]['models_rev'].update(((v, k) for (k, v) in lang[l]['models'].iteritems()))\n"; |
147 | +print " lang[l]['layouts_rev'].update(((v, k) for (k, v) in lang[l]['layouts'].iteritems()))\n"; |
148 | +print " for layoutname in lang[l]['variants'].keys():\n"; |
149 | +print " lang[l]['variants_rev'][layoutname] = {}\n"; |
150 | +print " lang[l]['variants_rev'][layoutname].update(((v, k) for (k, v) in lang[l]['variants_rev'][layoutname].iteritems()))\n"; |
151 | |
152 | === modified file 'debian/rules' |
153 | --- debian/rules 2009-11-27 20:38:59 +0000 |
154 | +++ debian/rules 2010-01-20 23:36:15 +0000 |
155 | @@ -57,6 +57,7 @@ |
156 | $(MAKE) -C d-i clean |
157 | dh_auto_clean |
158 | dh_clean |
159 | + rm -f debian/kbdnames.gz |
160 | |
161 | $(MAKE) -C d-i check |
162 | |
163 | @@ -64,11 +65,16 @@ |
164 | $(MAKE) -C d-i/source/console-setup/Keyboard MyKeyboardNames.pl \ |
165 | xkbdir=/usr/share/X11/xkb |
166 | |
167 | +debian/kbdnames.gz: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl |
168 | + ( cd d-i/source/console-setup/Keyboard \ |
169 | + && ./kbdnames-maker MyKeyboardNames.pl \ |
170 | + | grep -v '^C[*]' | grep -v '[*]model[*]' | sort | gzip -9 ) >$@ |
171 | + |
172 | ubiquity/keyboard_names.py: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl |
173 | d-i/make-keyboard-names $< > $@ |
174 | |
175 | install: DH_OPTIONS= |
176 | -install: build ubiquity/keyboard_names.py |
177 | +install: build ubiquity/keyboard_names.py debian/kbdnames.gz |
178 | dh_testdir |
179 | dh_testroot |
180 | dh_prep |
181 | |
182 | === modified file 'debian/ubiquity.install-any' |
183 | --- debian/ubiquity.install-any 2009-11-27 20:38:59 +0000 |
184 | +++ debian/ubiquity.install-any 2010-01-20 23:36:16 +0000 |
185 | @@ -42,6 +42,7 @@ |
186 | compat/locale usr/lib/ubiquity/console-setup |
187 | scripts/console-setup-apply usr/lib/ubiquity |
188 | ubiquity/components/ubi-console-setup.py usr/lib/ubiquity/plugins |
189 | +debian/kbdnames.gz usr/share/console-setup-mini |
190 | |
191 | # debian-installer-utils |
192 | d-i/source/debian-installer-utils/block-attr bin |
193 | |
194 | === modified file 'ubiquity/components/ubi-console-setup.py' |
195 | --- ubiquity/components/ubi-console-setup.py 2010-01-19 16:21:02 +0000 |
196 | +++ ubiquity/components/ubi-console-setup.py 2010-01-20 23:36:16 +0000 |
197 | @@ -208,10 +208,11 @@ |
198 | |
199 | def on_keyboard_layout_selected(self): |
200 | layout = self.get_keyboard() |
201 | + l = self.controller.dbfilter.get_locale() |
202 | if layout is not None: |
203 | #skip updating keyboard if not using display |
204 | if self.keyboardDisplay: |
205 | - ly = keyboard_names.layouts[unicode(layout)] |
206 | + ly = keyboard_names.lang[l]['layouts'][unicode(layout)] |
207 | self.keyboardDisplay.setLayout(ly) |
208 | |
209 | #no variants, force update by setting none |
210 | @@ -227,9 +228,10 @@ |
211 | |
212 | if self.keyboardDisplay: |
213 | var = None |
214 | - ly = keyboard_names.layouts[layout] |
215 | + l = self.controller.dbfilter.get_locale() |
216 | + ly = keyboard_names.lang[l]['layouts'][layout] |
217 | if variant and keyboard_names.variants.has_key(ly): |
218 | - variantMap = keyboard_names.variants[ly] |
219 | + variantMap = keyboard_names.lang[l]['variants'][ly] |
220 | var = variantMap[unicode(variant)] |
221 | |
222 | self.keyboardDisplay.setVariant(var) |
223 | @@ -254,7 +256,8 @@ |
224 | self.page.keyboard_layout_combobox.setCurrentIndex(index) |
225 | |
226 | if self.keyboardDisplay: |
227 | - ly = keyboard_names.layouts[unicode(layout)] |
228 | + l = self.controller.dbfilter.get_locale() |
229 | + ly = keyboard_names.lang[l]['layouts'][unicode(layout)] |
230 | self.keyboardDisplay.setLayout(ly) |
231 | |
232 | def get_keyboard(self): |
233 | @@ -278,9 +281,10 @@ |
234 | |
235 | if self.keyboardDisplay: |
236 | var = None |
237 | - layout = keyboard_names.layouts[self.get_keyboard()] |
238 | - if variant and keyboard_names.variants.has_key(layout): |
239 | - variantMap = keyboard_names.variants[layout] |
240 | + l = self.controller.dbfilter.get_locale() |
241 | + layout = keyboard_names.lang[l]['layouts'][self.get_keyboard()] |
242 | + if variant and keyboard_names.lang[l]['variants'].has_key(layout): |
243 | + variantMap = keyboard_names.lang[l]['variants'][layout] |
244 | var = variantMap[unicode(variant)] |
245 | |
246 | self.keyboardDisplay.setVariant(var) |
247 | @@ -342,6 +346,16 @@ |
248 | self.db.fset('console-setup/model', 'seen', 'false') |
249 | self.db.fset('console-setup/codeset', 'seen', 'false') |
250 | |
251 | + # Roughly taken from console-setup's config.proto: |
252 | + l = self.db.get('debian-installer/locale').rsplit('.', 1)[0] |
253 | + if l not in keyboard_names.lang: |
254 | + self.debug("Untranslated layout '%s'" % l) |
255 | + l = l.rsplit('_', 1)[0] |
256 | + if l not in keyboard_names.lang: |
257 | + self.debug("Untranslated layout '%s'" % l) |
258 | + l = 'C' |
259 | + self._locale = l |
260 | + |
261 | # Technically we should provide a version as the second argument, |
262 | # but that isn't currently needed and it would require querying |
263 | # apt/dpkg for the current version, which would be slow, so we don't |
264 | @@ -498,19 +512,23 @@ |
265 | |
266 | return (real_model, real_layout, real_variant, real_options) |
267 | |
268 | + def get_locale(self): |
269 | + return self._locale |
270 | + |
271 | def apply_keyboard(self, layout, variant): |
272 | model = self.db.get('console-setup/modelcode') |
273 | |
274 | - if layout not in keyboard_names.layouts: |
275 | + l = self.get_locale() |
276 | + if layout not in keyboard_names.lang[l]['layouts']: |
277 | self.debug("Unknown keyboard layout '%s'" % layout) |
278 | return |
279 | - layout = keyboard_names.layouts[layout] |
280 | + layout = keyboard_names.lang[l]['layouts'][layout] |
281 | |
282 | - if layout not in keyboard_names.variants: |
283 | + if layout not in keyboard_names.lang[l]['variants']: |
284 | self.debug("No known variants for layout '%s'" % layout) |
285 | variant = '' |
286 | - elif variant in keyboard_names.variants[layout]: |
287 | - variant = keyboard_names.variants[layout][variant] |
288 | + elif variant in keyboard_names.lang[l]['variants'][layout]: |
289 | + variant = keyboard_names.lang[l]['variants'][layout][variant] |
290 | else: |
291 | self.debug("Unknown keyboard variant '%s' for layout '%s'" % |
292 | (variant, layout)) |
I know you guys are busy, but I wanted to give everyone an opportunity to review this before I landed it on trunk. This and the accompanying console-setup branch add translated keyboard names to ubiquity, per the foundations- lucid-oem- config- localized- keyboard- layout specification.
I'm not entirely sold on shoving 1.5M of text into Python data structures. If it's an issue for the rest of you, I'll do away with keyboard_names.py and modify ubiquity to directly scan the kbdnames.gz file.
Please also see lp:~ev/console-setup/translated_layouts (merged from Debian), which is a prerequisite for this branch.
Thanks