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 | 5 | ./build-stamp | 5 | ./build-stamp |
6 | 6 | debian/build | 6 | debian/build |
7 | 7 | debian/files | 7 | debian/files |
8 | 8 | debian/kbdnames.gz | ||
9 | 8 | debian/oem-config | 9 | debian/oem-config |
10 | 9 | debian/oem-config-check | 10 | debian/oem-config-check |
11 | 10 | debian/oem-config-debconf | 11 | debian/oem-config-debconf |
12 | 11 | 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 | 3 | # Derived from console-setup/Keyboard/kbdnames-maker, by Anton Zinoviev. | 3 | # Derived from console-setup/Keyboard/kbdnames-maker, by Anton Zinoviev. |
18 | 4 | # Mangled to produce a Python module by Colin Watson. | 4 | # Mangled to produce a Python module by Colin Watson. |
19 | 5 | 5 | ||
20 | 6 | # This needs to die in a big chemical fire. | ||
21 | 7 | |||
22 | 6 | use warnings 'all'; | 8 | use warnings 'all'; |
23 | 7 | use strict; | 9 | use strict; |
24 | 10 | use Locale::gettext; | ||
25 | 11 | use POSIX; | ||
26 | 8 | 12 | ||
27 | 9 | my $file; | 13 | my $file; |
28 | 10 | 14 | ||
29 | @@ -23,43 +27,101 @@ | |||
30 | 23 | print "# Instead of editing this file, it is better to edit the original and\n"; | 27 | print "# Instead of editing this file, it is better to edit the original and\n"; |
31 | 24 | print "# regenerate this.\n\n"; | 28 | print "# regenerate this.\n\n"; |
32 | 25 | 29 | ||
34 | 26 | print "models = {\n"; | 30 | print "lang = {\n"; |
35 | 31 | print " 'C': {\n"; | ||
36 | 32 | print " 'models' : {\n"; | ||
37 | 27 | for my $model (sort keys %KeyboardNames::models) { | 33 | for my $model (sort keys %KeyboardNames::models) { |
38 | 28 | my $name = $KeyboardNames::models{$model}; | 34 | my $name = $KeyboardNames::models{$model}; |
39 | 29 | (my $modelesc = $model) =~ s/'/\\'/; | 35 | (my $modelesc = $model) =~ s/'/\\'/; |
41 | 30 | print " '$modelesc': '$name',\n"; | 36 | print " '$modelesc': '$name',\n"; |
42 | 31 | } | 37 | } |
46 | 32 | print "}\n\n"; | 38 | print " },\n"; |
47 | 33 | print "models_rev = {}\n"; | 39 | print " 'models_rev' : {},\n"; |
45 | 34 | print "models_rev.update(((v, k) for (k, v) in models.iteritems()))\n\n"; | ||
48 | 35 | 40 | ||
49 | 36 | my %layouts_rev; | 41 | my %layouts_rev; |
51 | 37 | print "layouts = {\n"; | 42 | print " 'layouts' : {\n"; |
52 | 38 | for my $layout (sort keys %KeyboardNames::layouts) { | 43 | for my $layout (sort keys %KeyboardNames::layouts) { |
53 | 39 | my $name = $KeyboardNames::layouts{$layout}; | 44 | my $name = $KeyboardNames::layouts{$layout}; |
54 | 40 | $layouts_rev{$name} = $layout; | 45 | $layouts_rev{$name} = $layout; |
55 | 41 | (my $layoutesc = $layout) =~ s/'/\\'/g; | 46 | (my $layoutesc = $layout) =~ s/'/\\'/g; |
57 | 42 | print " '$layoutesc': '$name',\n"; | 47 | print " '$layoutesc': '$name',\n"; |
58 | 43 | } | 48 | } |
62 | 44 | print "}\n\n"; | 49 | print " },\n"; |
63 | 45 | print "layouts_rev = {}\n"; | 50 | print " 'layouts_rev' : {},\n"; |
61 | 46 | print "layouts_rev.update(((v, k) for (k, v) in layouts.iteritems()))\n\n"; | ||
64 | 47 | 51 | ||
66 | 48 | print "variants = {\n"; | 52 | print " 'variants' : {\n"; |
67 | 49 | for my $layout (sort keys %KeyboardNames::variants) { | 53 | for my $layout (sort keys %KeyboardNames::variants) { |
68 | 50 | my $desc = $layouts_rev{$layout}; | 54 | my $desc = $layouts_rev{$layout}; |
70 | 51 | print " '$layout': {\n"; | 55 | print " '$layout': {\n"; |
71 | 52 | (my $layoutesc = $desc) =~ s/'/\\'/g; | 56 | (my $layoutesc = $desc) =~ s/'/\\'/g; |
73 | 53 | print " '$layoutesc': '',\n"; | 57 | print " '$layoutesc': '',\n"; |
74 | 54 | for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) { | 58 | for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) { |
75 | 55 | my $variantname = $KeyboardNames::variants{$layout}{$variant}; | 59 | my $variantname = $KeyboardNames::variants{$layout}{$variant}; |
76 | 56 | (my $variantesc = "$desc - $variant") =~ s/'/\\'/g; | 60 | (my $variantesc = "$desc - $variant") =~ s/'/\\'/g; |
79 | 57 | print " '$variantesc': '$variantname',\n"; | 61 | print " '$variantesc': '$variantname',\n"; |
80 | 58 | } | 62 | } |
81 | 63 | print " },\n"; | ||
82 | 64 | } | ||
83 | 65 | print " },\n"; | ||
84 | 66 | print " 'variants_rev' : {},\n"; | ||
85 | 67 | print " },\n"; | ||
86 | 68 | |||
87 | 69 | # Make sure we output UTF-8 | ||
88 | 70 | $ENV{'LC_ALL'} = "en_US.UTF-8"; | ||
89 | 71 | binmode STDOUT, ":utf8"; | ||
90 | 72 | |||
91 | 73 | for my $mo (</usr/share/locale/*/LC_MESSAGES/xkeyboard-config.mo>) { | ||
92 | 74 | my $lang = $mo; | ||
93 | 75 | $lang =~ s:/usr/share/locale/(.*)/LC_MESSAGES/xkeyboard-config.mo:$1:; | ||
94 | 76 | $ENV{'LANGUAGE'} = $lang; | ||
95 | 77 | setlocale(LC_ALL,""); | ||
96 | 78 | |||
97 | 79 | $lang =~ s:\@:__:; | ||
98 | 80 | $lang =~ s:__Latn:__latin:; # special fixup for sr | ||
99 | 81 | |||
100 | 82 | my $d = Locale::gettext->domain("xkeyboard-config"); | ||
101 | 83 | |||
102 | 84 | print " '$lang': {\n"; | ||
103 | 85 | print " 'models': {\n"; | ||
104 | 86 | for my $model (sort keys %KeyboardNames::models) { | ||
105 | 87 | my $name = $KeyboardNames::models{$model}; | ||
106 | 88 | (my $local_model = $d->get($model)) =~ s/'/\\'/g; | ||
107 | 89 | print " u'$local_model': '$name',\n" | ||
108 | 90 | } | ||
109 | 91 | print " },\n"; | ||
110 | 92 | print " 'models_rev' : {},\n"; | ||
111 | 93 | print " 'layouts' : {\n"; | ||
112 | 94 | for my $layout (sort keys %KeyboardNames::layouts) { | ||
113 | 95 | my $name = $KeyboardNames::layouts{$layout}; | ||
114 | 96 | my $local_layout = $d->get($layout); | ||
115 | 97 | (my $layoutesc = $local_layout) =~ s/'/\\'/g; | ||
116 | 98 | print " u'$layoutesc': '$name',\n"; | ||
117 | 99 | } | ||
118 | 100 | print " },\n"; | ||
119 | 101 | print " 'layouts_rev' : {},\n"; | ||
120 | 102 | print " 'variants' : {\n"; | ||
121 | 103 | for my $layout (sort keys %KeyboardNames::variants) { | ||
122 | 104 | my $local_desc = $d->get($layouts_rev{$layout}); | ||
123 | 105 | print " '$layout': {\n"; | ||
124 | 106 | (my $layoutesc = $local_desc) =~ s/'/\\'/g; | ||
125 | 107 | print " u'$layoutesc': '',\n"; | ||
126 | 108 | for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) { | ||
127 | 109 | my $local_variant = $d->get($variant); | ||
128 | 110 | my $variantname = $KeyboardNames::variants{$layout}{$variant}; | ||
129 | 111 | (my $variantesc = "$local_desc - $local_variant") =~ s/'/\\'/g; | ||
130 | 112 | print " u'$variantesc': '$variantname',\n"; | ||
131 | 113 | } | ||
132 | 114 | print " },\n"; | ||
133 | 115 | } | ||
134 | 116 | print " },\n"; | ||
135 | 117 | print " 'variants_rev' : {},\n"; | ||
136 | 59 | print " },\n"; | 118 | print " },\n"; |
137 | 60 | } | 119 | } |
143 | 61 | print "}\n\n"; | 120 | |
144 | 62 | print "variants_rev = {}\n"; | 121 | print "}\n"; |
145 | 63 | print "for layoutname in variants.keys():\n"; | 122 | print "for l in lang:\n"; |
146 | 64 | print " variants_rev[layoutname] = {}\n"; | 123 | print " lang[l]['models_rev'].update(((v, k) for (k, v) in lang[l]['models'].iteritems()))\n"; |
147 | 65 | print " variants_rev[layoutname].update(((v, k) for (k, v) in variants_rev[layoutname].iteritems()))\n"; | 124 | print " lang[l]['layouts_rev'].update(((v, k) for (k, v) in lang[l]['layouts'].iteritems()))\n"; |
148 | 125 | print " for layoutname in lang[l]['variants'].keys():\n"; | ||
149 | 126 | print " lang[l]['variants_rev'][layoutname] = {}\n"; | ||
150 | 127 | print " lang[l]['variants_rev'][layoutname].update(((v, k) for (k, v) in lang[l]['variants_rev'][layoutname].iteritems()))\n"; | ||
151 | 66 | 128 | ||
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 | 57 | $(MAKE) -C d-i clean | 57 | $(MAKE) -C d-i clean |
157 | 58 | dh_auto_clean | 58 | dh_auto_clean |
158 | 59 | dh_clean | 59 | dh_clean |
159 | 60 | rm -f debian/kbdnames.gz | ||
160 | 60 | 61 | ||
161 | 61 | $(MAKE) -C d-i check | 62 | $(MAKE) -C d-i check |
162 | 62 | 63 | ||
163 | @@ -64,11 +65,16 @@ | |||
164 | 64 | $(MAKE) -C d-i/source/console-setup/Keyboard MyKeyboardNames.pl \ | 65 | $(MAKE) -C d-i/source/console-setup/Keyboard MyKeyboardNames.pl \ |
165 | 65 | xkbdir=/usr/share/X11/xkb | 66 | xkbdir=/usr/share/X11/xkb |
166 | 66 | 67 | ||
167 | 68 | debian/kbdnames.gz: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl | ||
168 | 69 | ( cd d-i/source/console-setup/Keyboard \ | ||
169 | 70 | && ./kbdnames-maker MyKeyboardNames.pl \ | ||
170 | 71 | | grep -v '^C[*]' | grep -v '[*]model[*]' | sort | gzip -9 ) >$@ | ||
171 | 72 | |||
172 | 67 | ubiquity/keyboard_names.py: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl | 73 | ubiquity/keyboard_names.py: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl |
173 | 68 | d-i/make-keyboard-names $< > $@ | 74 | d-i/make-keyboard-names $< > $@ |
174 | 69 | 75 | ||
175 | 70 | install: DH_OPTIONS= | 76 | install: DH_OPTIONS= |
177 | 71 | install: build ubiquity/keyboard_names.py | 77 | install: build ubiquity/keyboard_names.py debian/kbdnames.gz |
178 | 72 | dh_testdir | 78 | dh_testdir |
179 | 73 | dh_testroot | 79 | dh_testroot |
180 | 74 | dh_prep | 80 | dh_prep |
181 | 75 | 81 | ||
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 | 42 | compat/locale usr/lib/ubiquity/console-setup | 42 | compat/locale usr/lib/ubiquity/console-setup |
187 | 43 | scripts/console-setup-apply usr/lib/ubiquity | 43 | scripts/console-setup-apply usr/lib/ubiquity |
188 | 44 | ubiquity/components/ubi-console-setup.py usr/lib/ubiquity/plugins | 44 | ubiquity/components/ubi-console-setup.py usr/lib/ubiquity/plugins |
189 | 45 | debian/kbdnames.gz usr/share/console-setup-mini | ||
190 | 45 | 46 | ||
191 | 46 | # debian-installer-utils | 47 | # debian-installer-utils |
192 | 47 | d-i/source/debian-installer-utils/block-attr bin | 48 | d-i/source/debian-installer-utils/block-attr bin |
193 | 48 | 49 | ||
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 | 208 | 208 | ||
199 | 209 | def on_keyboard_layout_selected(self): | 209 | def on_keyboard_layout_selected(self): |
200 | 210 | layout = self.get_keyboard() | 210 | layout = self.get_keyboard() |
201 | 211 | l = self.controller.dbfilter.get_locale() | ||
202 | 211 | if layout is not None: | 212 | if layout is not None: |
203 | 212 | #skip updating keyboard if not using display | 213 | #skip updating keyboard if not using display |
204 | 213 | if self.keyboardDisplay: | 214 | if self.keyboardDisplay: |
206 | 214 | ly = keyboard_names.layouts[unicode(layout)] | 215 | ly = keyboard_names.lang[l]['layouts'][unicode(layout)] |
207 | 215 | self.keyboardDisplay.setLayout(ly) | 216 | self.keyboardDisplay.setLayout(ly) |
208 | 216 | 217 | ||
209 | 217 | #no variants, force update by setting none | 218 | #no variants, force update by setting none |
210 | @@ -227,9 +228,10 @@ | |||
211 | 227 | 228 | ||
212 | 228 | if self.keyboardDisplay: | 229 | if self.keyboardDisplay: |
213 | 229 | var = None | 230 | var = None |
215 | 230 | ly = keyboard_names.layouts[layout] | 231 | l = self.controller.dbfilter.get_locale() |
216 | 232 | ly = keyboard_names.lang[l]['layouts'][layout] | ||
217 | 231 | if variant and keyboard_names.variants.has_key(ly): | 233 | if variant and keyboard_names.variants.has_key(ly): |
219 | 232 | variantMap = keyboard_names.variants[ly] | 234 | variantMap = keyboard_names.lang[l]['variants'][ly] |
220 | 233 | var = variantMap[unicode(variant)] | 235 | var = variantMap[unicode(variant)] |
221 | 234 | 236 | ||
222 | 235 | self.keyboardDisplay.setVariant(var) | 237 | self.keyboardDisplay.setVariant(var) |
223 | @@ -254,7 +256,8 @@ | |||
224 | 254 | self.page.keyboard_layout_combobox.setCurrentIndex(index) | 256 | self.page.keyboard_layout_combobox.setCurrentIndex(index) |
225 | 255 | 257 | ||
226 | 256 | if self.keyboardDisplay: | 258 | if self.keyboardDisplay: |
228 | 257 | ly = keyboard_names.layouts[unicode(layout)] | 259 | l = self.controller.dbfilter.get_locale() |
229 | 260 | ly = keyboard_names.lang[l]['layouts'][unicode(layout)] | ||
230 | 258 | self.keyboardDisplay.setLayout(ly) | 261 | self.keyboardDisplay.setLayout(ly) |
231 | 259 | 262 | ||
232 | 260 | def get_keyboard(self): | 263 | def get_keyboard(self): |
233 | @@ -278,9 +281,10 @@ | |||
234 | 278 | 281 | ||
235 | 279 | if self.keyboardDisplay: | 282 | if self.keyboardDisplay: |
236 | 280 | var = None | 283 | var = None |
240 | 281 | layout = keyboard_names.layouts[self.get_keyboard()] | 284 | l = self.controller.dbfilter.get_locale() |
241 | 282 | if variant and keyboard_names.variants.has_key(layout): | 285 | layout = keyboard_names.lang[l]['layouts'][self.get_keyboard()] |
242 | 283 | variantMap = keyboard_names.variants[layout] | 286 | if variant and keyboard_names.lang[l]['variants'].has_key(layout): |
243 | 287 | variantMap = keyboard_names.lang[l]['variants'][layout] | ||
244 | 284 | var = variantMap[unicode(variant)] | 288 | var = variantMap[unicode(variant)] |
245 | 285 | 289 | ||
246 | 286 | self.keyboardDisplay.setVariant(var) | 290 | self.keyboardDisplay.setVariant(var) |
247 | @@ -342,6 +346,16 @@ | |||
248 | 342 | self.db.fset('console-setup/model', 'seen', 'false') | 346 | self.db.fset('console-setup/model', 'seen', 'false') |
249 | 343 | self.db.fset('console-setup/codeset', 'seen', 'false') | 347 | self.db.fset('console-setup/codeset', 'seen', 'false') |
250 | 344 | 348 | ||
251 | 349 | # Roughly taken from console-setup's config.proto: | ||
252 | 350 | l = self.db.get('debian-installer/locale').rsplit('.', 1)[0] | ||
253 | 351 | if l not in keyboard_names.lang: | ||
254 | 352 | self.debug("Untranslated layout '%s'" % l) | ||
255 | 353 | l = l.rsplit('_', 1)[0] | ||
256 | 354 | if l not in keyboard_names.lang: | ||
257 | 355 | self.debug("Untranslated layout '%s'" % l) | ||
258 | 356 | l = 'C' | ||
259 | 357 | self._locale = l | ||
260 | 358 | |||
261 | 345 | # Technically we should provide a version as the second argument, | 359 | # Technically we should provide a version as the second argument, |
262 | 346 | # but that isn't currently needed and it would require querying | 360 | # but that isn't currently needed and it would require querying |
263 | 347 | # apt/dpkg for the current version, which would be slow, so we don't | 361 | # apt/dpkg for the current version, which would be slow, so we don't |
264 | @@ -498,19 +512,23 @@ | |||
265 | 498 | 512 | ||
266 | 499 | return (real_model, real_layout, real_variant, real_options) | 513 | return (real_model, real_layout, real_variant, real_options) |
267 | 500 | 514 | ||
268 | 515 | def get_locale(self): | ||
269 | 516 | return self._locale | ||
270 | 517 | |||
271 | 501 | def apply_keyboard(self, layout, variant): | 518 | def apply_keyboard(self, layout, variant): |
272 | 502 | model = self.db.get('console-setup/modelcode') | 519 | model = self.db.get('console-setup/modelcode') |
273 | 503 | 520 | ||
275 | 504 | if layout not in keyboard_names.layouts: | 521 | l = self.get_locale() |
276 | 522 | if layout not in keyboard_names.lang[l]['layouts']: | ||
277 | 505 | self.debug("Unknown keyboard layout '%s'" % layout) | 523 | self.debug("Unknown keyboard layout '%s'" % layout) |
278 | 506 | return | 524 | return |
280 | 507 | layout = keyboard_names.layouts[layout] | 525 | layout = keyboard_names.lang[l]['layouts'][layout] |
281 | 508 | 526 | ||
283 | 509 | if layout not in keyboard_names.variants: | 527 | if layout not in keyboard_names.lang[l]['variants']: |
284 | 510 | self.debug("No known variants for layout '%s'" % layout) | 528 | self.debug("No known variants for layout '%s'" % layout) |
285 | 511 | variant = '' | 529 | variant = '' |
288 | 512 | elif variant in keyboard_names.variants[layout]: | 530 | elif variant in keyboard_names.lang[l]['variants'][layout]: |
289 | 513 | variant = keyboard_names.variants[layout][variant] | 531 | variant = keyboard_names.lang[l]['variants'][layout][variant] |
290 | 514 | else: | 532 | else: |
291 | 515 | self.debug("Unknown keyboard variant '%s' for layout '%s'" % | 533 | self.debug("Unknown keyboard variant '%s' for layout '%s'" % |
292 | 516 | (variant, layout)) | 534 | (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