Merge lp:~ev/ubiquity/translated_layouts into lp:ubiquity

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
Reviewer Review Type Date Requested Status
Ubuntu Installer Team Pending
Review via email: mp+17461@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Evan (ev) wrote :

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

lp:~ev/ubiquity/translated_layouts updated
3658. By Evan

Unbreak KDE keyboard layout handling.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.bzrignore'
--- .bzrignore 2010-01-20 12:15:00 +0000
+++ .bzrignore 2010-01-20 23:36:15 +0000
@@ -5,6 +5,7 @@
5./build-stamp5./build-stamp
6debian/build6debian/build
7debian/files7debian/files
8debian/kbdnames.gz
8debian/oem-config9debian/oem-config
9debian/oem-config-check10debian/oem-config-check
10debian/oem-config-debconf11debian/oem-config-debconf
1112
=== modified file 'd-i/make-keyboard-names'
--- d-i/make-keyboard-names 2006-10-02 18:34:01 +0000
+++ d-i/make-keyboard-names 2010-01-20 23:36:15 +0000
@@ -3,8 +3,12 @@
3# Derived from console-setup/Keyboard/kbdnames-maker, by Anton Zinoviev.3# Derived from console-setup/Keyboard/kbdnames-maker, by Anton Zinoviev.
4# Mangled to produce a Python module by Colin Watson.4# Mangled to produce a Python module by Colin Watson.
55
6# This needs to die in a big chemical fire.
7
6use warnings 'all';8use warnings 'all';
7use strict;9use strict;
10use Locale::gettext;
11use POSIX;
812
9my $file;13my $file;
1014
@@ -23,43 +27,101 @@
23print "# Instead of editing this file, it is better to edit the original and\n";27print "# Instead of editing this file, it is better to edit the original and\n";
24print "# regenerate this.\n\n";28print "# regenerate this.\n\n";
2529
26print "models = {\n";30print "lang = {\n";
31print " 'C': {\n";
32print " 'models' : {\n";
27for my $model (sort keys %KeyboardNames::models) {33for my $model (sort keys %KeyboardNames::models) {
28 my $name = $KeyboardNames::models{$model};34 my $name = $KeyboardNames::models{$model};
29 (my $modelesc = $model) =~ s/'/\\'/;35 (my $modelesc = $model) =~ s/'/\\'/;
30 print " '$modelesc': '$name',\n";36 print " '$modelesc': '$name',\n";
31}37}
32print "}\n\n";38print " },\n";
33print "models_rev = {}\n";39print " 'models_rev' : {},\n";
34print "models_rev.update(((v, k) for (k, v) in models.iteritems()))\n\n";
3540
36my %layouts_rev;41my %layouts_rev;
37print "layouts = {\n";42print " 'layouts' : {\n";
38for my $layout (sort keys %KeyboardNames::layouts) {43for my $layout (sort keys %KeyboardNames::layouts) {
39 my $name = $KeyboardNames::layouts{$layout};44 my $name = $KeyboardNames::layouts{$layout};
40 $layouts_rev{$name} = $layout;45 $layouts_rev{$name} = $layout;
41 (my $layoutesc = $layout) =~ s/'/\\'/g;46 (my $layoutesc = $layout) =~ s/'/\\'/g;
42 print " '$layoutesc': '$name',\n";47 print " '$layoutesc': '$name',\n";
43}48}
44print "}\n\n";49print " },\n";
45print "layouts_rev = {}\n";50print " 'layouts_rev' : {},\n";
46print "layouts_rev.update(((v, k) for (k, v) in layouts.iteritems()))\n\n";
4751
48print "variants = {\n";52print " 'variants' : {\n";
49for my $layout (sort keys %KeyboardNames::variants) {53for my $layout (sort keys %KeyboardNames::variants) {
50 my $desc = $layouts_rev{$layout};54 my $desc = $layouts_rev{$layout};
51 print " '$layout': {\n";55 print " '$layout': {\n";
52 (my $layoutesc = $desc) =~ s/'/\\'/g;56 (my $layoutesc = $desc) =~ s/'/\\'/g;
53 print " '$layoutesc': '',\n";57 print " '$layoutesc': '',\n";
54 for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) {58 for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) {
55 my $variantname = $KeyboardNames::variants{$layout}{$variant};59 my $variantname = $KeyboardNames::variants{$layout}{$variant};
56 (my $variantesc = "$desc - $variant") =~ s/'/\\'/g;60 (my $variantesc = "$desc - $variant") =~ s/'/\\'/g;
57 print " '$variantesc': '$variantname',\n";61 print " '$variantesc': '$variantname',\n";
58 }62 }
63 print " },\n";
64}
65print " },\n";
66print " 'variants_rev' : {},\n";
67print " },\n";
68
69# Make sure we output UTF-8
70$ENV{'LC_ALL'} = "en_US.UTF-8";
71binmode STDOUT, ":utf8";
72
73for my $mo (</usr/share/locale/*/LC_MESSAGES/xkeyboard-config.mo>) {
74 my $lang = $mo;
75 $lang =~ s:/usr/share/locale/(.*)/LC_MESSAGES/xkeyboard-config.mo:$1:;
76 $ENV{'LANGUAGE'} = $lang;
77 setlocale(LC_ALL,"");
78
79 $lang =~ s:\@:__:;
80 $lang =~ s:__Latn:__latin:; # special fixup for sr
81
82 my $d = Locale::gettext->domain("xkeyboard-config");
83
84 print " '$lang': {\n";
85 print " 'models': {\n";
86 for my $model (sort keys %KeyboardNames::models) {
87 my $name = $KeyboardNames::models{$model};
88 (my $local_model = $d->get($model)) =~ s/'/\\'/g;
89 print " u'$local_model': '$name',\n"
90 }
91 print " },\n";
92 print " 'models_rev' : {},\n";
93 print " 'layouts' : {\n";
94 for my $layout (sort keys %KeyboardNames::layouts) {
95 my $name = $KeyboardNames::layouts{$layout};
96 my $local_layout = $d->get($layout);
97 (my $layoutesc = $local_layout) =~ s/'/\\'/g;
98 print " u'$layoutesc': '$name',\n";
99 }
100 print " },\n";
101 print " 'layouts_rev' : {},\n";
102 print " 'variants' : {\n";
103 for my $layout (sort keys %KeyboardNames::variants) {
104 my $local_desc = $d->get($layouts_rev{$layout});
105 print " '$layout': {\n";
106 (my $layoutesc = $local_desc) =~ s/'/\\'/g;
107 print " u'$layoutesc': '',\n";
108 for my $variant (sort keys %{$KeyboardNames::variants{$layout}}) {
109 my $local_variant = $d->get($variant);
110 my $variantname = $KeyboardNames::variants{$layout}{$variant};
111 (my $variantesc = "$local_desc - $local_variant") =~ s/'/\\'/g;
112 print " u'$variantesc': '$variantname',\n";
113 }
114 print " },\n";
115 }
116 print " },\n";
117 print " 'variants_rev' : {},\n";
59 print " },\n";118 print " },\n";
60}119}
61print "}\n\n";120
62print "variants_rev = {}\n";121print "}\n";
63print "for layoutname in variants.keys():\n";122print "for l in lang:\n";
64print " variants_rev[layoutname] = {}\n";123print " lang[l]['models_rev'].update(((v, k) for (k, v) in lang[l]['models'].iteritems()))\n";
65print " variants_rev[layoutname].update(((v, k) for (k, v) in variants_rev[layoutname].iteritems()))\n";124print " lang[l]['layouts_rev'].update(((v, k) for (k, v) in lang[l]['layouts'].iteritems()))\n";
125print " for layoutname in lang[l]['variants'].keys():\n";
126print " lang[l]['variants_rev'][layoutname] = {}\n";
127print " lang[l]['variants_rev'][layoutname].update(((v, k) for (k, v) in lang[l]['variants_rev'][layoutname].iteritems()))\n";
66128
=== modified file 'debian/rules'
--- debian/rules 2009-11-27 20:38:59 +0000
+++ debian/rules 2010-01-20 23:36:15 +0000
@@ -57,6 +57,7 @@
57 $(MAKE) -C d-i clean57 $(MAKE) -C d-i clean
58 dh_auto_clean58 dh_auto_clean
59 dh_clean59 dh_clean
60 rm -f debian/kbdnames.gz
6061
61 $(MAKE) -C d-i check62 $(MAKE) -C d-i check
6263
@@ -64,11 +65,16 @@
64 $(MAKE) -C d-i/source/console-setup/Keyboard MyKeyboardNames.pl \65 $(MAKE) -C d-i/source/console-setup/Keyboard MyKeyboardNames.pl \
65 xkbdir=/usr/share/X11/xkb66 xkbdir=/usr/share/X11/xkb
6667
68debian/kbdnames.gz: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl
69 ( cd d-i/source/console-setup/Keyboard \
70 && ./kbdnames-maker MyKeyboardNames.pl \
71 | grep -v '^C[*]' | grep -v '[*]model[*]' | sort | gzip -9 ) >$@
72
67ubiquity/keyboard_names.py: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl73ubiquity/keyboard_names.py: d-i/source/console-setup/Keyboard/MyKeyboardNames.pl
68 d-i/make-keyboard-names $< > $@74 d-i/make-keyboard-names $< > $@
6975
70install: DH_OPTIONS=76install: DH_OPTIONS=
71install: build ubiquity/keyboard_names.py77install: build ubiquity/keyboard_names.py debian/kbdnames.gz
72 dh_testdir78 dh_testdir
73 dh_testroot79 dh_testroot
74 dh_prep80 dh_prep
7581
=== modified file 'debian/ubiquity.install-any'
--- debian/ubiquity.install-any 2009-11-27 20:38:59 +0000
+++ debian/ubiquity.install-any 2010-01-20 23:36:16 +0000
@@ -42,6 +42,7 @@
42compat/locale usr/lib/ubiquity/console-setup42compat/locale usr/lib/ubiquity/console-setup
43scripts/console-setup-apply usr/lib/ubiquity43scripts/console-setup-apply usr/lib/ubiquity
44ubiquity/components/ubi-console-setup.py usr/lib/ubiquity/plugins44ubiquity/components/ubi-console-setup.py usr/lib/ubiquity/plugins
45debian/kbdnames.gz usr/share/console-setup-mini
4546
46# debian-installer-utils47# debian-installer-utils
47d-i/source/debian-installer-utils/block-attr bin48d-i/source/debian-installer-utils/block-attr bin
4849
=== modified file 'ubiquity/components/ubi-console-setup.py'
--- ubiquity/components/ubi-console-setup.py 2010-01-19 16:21:02 +0000
+++ ubiquity/components/ubi-console-setup.py 2010-01-20 23:36:16 +0000
@@ -208,10 +208,11 @@
208208
209 def on_keyboard_layout_selected(self):209 def on_keyboard_layout_selected(self):
210 layout = self.get_keyboard()210 layout = self.get_keyboard()
211 l = self.controller.dbfilter.get_locale()
211 if layout is not None:212 if layout is not None:
212 #skip updating keyboard if not using display213 #skip updating keyboard if not using display
213 if self.keyboardDisplay:214 if self.keyboardDisplay:
214 ly = keyboard_names.layouts[unicode(layout)]215 ly = keyboard_names.lang[l]['layouts'][unicode(layout)]
215 self.keyboardDisplay.setLayout(ly)216 self.keyboardDisplay.setLayout(ly)
216 217
217 #no variants, force update by setting none218 #no variants, force update by setting none
@@ -227,9 +228,10 @@
227 228
228 if self.keyboardDisplay:229 if self.keyboardDisplay:
229 var = None230 var = None
230 ly = keyboard_names.layouts[layout]231 l = self.controller.dbfilter.get_locale()
232 ly = keyboard_names.lang[l]['layouts'][layout]
231 if variant and keyboard_names.variants.has_key(ly):233 if variant and keyboard_names.variants.has_key(ly):
232 variantMap = keyboard_names.variants[ly]234 variantMap = keyboard_names.lang[l]['variants'][ly]
233 var = variantMap[unicode(variant)]235 var = variantMap[unicode(variant)]
234 236
235 self.keyboardDisplay.setVariant(var)237 self.keyboardDisplay.setVariant(var)
@@ -254,7 +256,8 @@
254 self.page.keyboard_layout_combobox.setCurrentIndex(index)256 self.page.keyboard_layout_combobox.setCurrentIndex(index)
255 257
256 if self.keyboardDisplay:258 if self.keyboardDisplay:
257 ly = keyboard_names.layouts[unicode(layout)]259 l = self.controller.dbfilter.get_locale()
260 ly = keyboard_names.lang[l]['layouts'][unicode(layout)]
258 self.keyboardDisplay.setLayout(ly)261 self.keyboardDisplay.setLayout(ly)
259262
260 def get_keyboard(self):263 def get_keyboard(self):
@@ -278,9 +281,10 @@
278 281
279 if self.keyboardDisplay:282 if self.keyboardDisplay:
280 var = None283 var = None
281 layout = keyboard_names.layouts[self.get_keyboard()]284 l = self.controller.dbfilter.get_locale()
282 if variant and keyboard_names.variants.has_key(layout):285 layout = keyboard_names.lang[l]['layouts'][self.get_keyboard()]
283 variantMap = keyboard_names.variants[layout]286 if variant and keyboard_names.lang[l]['variants'].has_key(layout):
287 variantMap = keyboard_names.lang[l]['variants'][layout]
284 var = variantMap[unicode(variant)]288 var = variantMap[unicode(variant)]
285 289
286 self.keyboardDisplay.setVariant(var)290 self.keyboardDisplay.setVariant(var)
@@ -342,6 +346,16 @@
342 self.db.fset('console-setup/model', 'seen', 'false')346 self.db.fset('console-setup/model', 'seen', 'false')
343 self.db.fset('console-setup/codeset', 'seen', 'false')347 self.db.fset('console-setup/codeset', 'seen', 'false')
344348
349 # Roughly taken from console-setup's config.proto:
350 l = self.db.get('debian-installer/locale').rsplit('.', 1)[0]
351 if l not in keyboard_names.lang:
352 self.debug("Untranslated layout '%s'" % l)
353 l = l.rsplit('_', 1)[0]
354 if l not in keyboard_names.lang:
355 self.debug("Untranslated layout '%s'" % l)
356 l = 'C'
357 self._locale = l
358
345 # Technically we should provide a version as the second argument,359 # Technically we should provide a version as the second argument,
346 # but that isn't currently needed and it would require querying360 # but that isn't currently needed and it would require querying
347 # apt/dpkg for the current version, which would be slow, so we don't361 # apt/dpkg for the current version, which would be slow, so we don't
@@ -498,19 +512,23 @@
498512
499 return (real_model, real_layout, real_variant, real_options)513 return (real_model, real_layout, real_variant, real_options)
500514
515 def get_locale(self):
516 return self._locale
517
501 def apply_keyboard(self, layout, variant):518 def apply_keyboard(self, layout, variant):
502 model = self.db.get('console-setup/modelcode')519 model = self.db.get('console-setup/modelcode')
503520
504 if layout not in keyboard_names.layouts:521 l = self.get_locale()
522 if layout not in keyboard_names.lang[l]['layouts']:
505 self.debug("Unknown keyboard layout '%s'" % layout)523 self.debug("Unknown keyboard layout '%s'" % layout)
506 return524 return
507 layout = keyboard_names.layouts[layout]525 layout = keyboard_names.lang[l]['layouts'][layout]
508526
509 if layout not in keyboard_names.variants:527 if layout not in keyboard_names.lang[l]['variants']:
510 self.debug("No known variants for layout '%s'" % layout)528 self.debug("No known variants for layout '%s'" % layout)
511 variant = ''529 variant = ''
512 elif variant in keyboard_names.variants[layout]:530 elif variant in keyboard_names.lang[l]['variants'][layout]:
513 variant = keyboard_names.variants[layout][variant]531 variant = keyboard_names.lang[l]['variants'][layout][variant]
514 else:532 else:
515 self.debug("Unknown keyboard variant '%s' for layout '%s'" %533 self.debug("Unknown keyboard variant '%s' for layout '%s'" %
516 (variant, layout))534 (variant, layout))

Subscribers

People subscribed via source and target branches

to status/vote changes: