language_preferences.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/basictypes.h"
6#include "base/prefs/pref_registry_simple.h"
7#include "chrome/browser/chromeos/language_preferences.h"
8#include "chrome/common/pref_names.h"
9#include "components/user_prefs/pref_registry_syncable.h"
10#include "grit/generated_resources.h"
11
12namespace chromeos {
13namespace language_prefs {
14
15// ---------------------------------------------------------------------------
16// For ibus-daemon
17// ---------------------------------------------------------------------------
18const char kGeneralSectionName[] = "general";
19const char kPreloadEnginesConfigName[] = "preload_engines";
20
21// ---------------------------------------------------------------------------
22// For Traditional Chinese input method (ibus-mozc-chewing)
23// ---------------------------------------------------------------------------
24const char kChewingSectionName[] = "engine/Chewing";
25
26// We have to sync the |ibus_config_name|s with those in
27// ibus-chewing/files/src/Config.cc.
28const LanguageBooleanPrefs kChewingBooleanPrefs[] = {
29  { prefs::kLanguageChewingAutoShiftCur, false, "autoShiftCur",
30    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_AUTO_SHIFT_CUR,
31    PrefRegistrySyncable::SYNCABLE_PREF },
32  { prefs::kLanguageChewingAddPhraseDirection, false, "addPhraseDirection",
33    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_ADD_PHRASE_DIRECTION,
34    PrefRegistrySyncable::SYNCABLE_PREF },
35  /* Temporarily disabled. (crosbug.com/14185)
36  { prefs::kLanguageChewingEasySymbolInput, true, "easySymbolInput",
37    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_EASY_SYMBOL_INPUT,
38    PrefRegistrySyncable::SYNCABLE_PREF },
39  */
40  { prefs::kLanguageChewingEscCleanAllBuf, false, "escCleanAllBuf",
41    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_ESC_CLEAN_ALL_BUF,
42    PrefRegistrySyncable::SYNCABLE_PREF },
43  { prefs::kLanguageChewingForceLowercaseEnglish, false,
44    "forceLowercaseEnglish",
45    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_FORCE_LOWER_CASE_ENGLISH,
46    PrefRegistrySyncable::SYNCABLE_PREF },
47  /* Temporarily disabled. (crosbug.com/14185)
48  { prefs::kLanguageChewingPlainZhuyin, false, "plainZhuyin",
49    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_PLAIN_ZHUYIN,
50    PrefRegistrySyncable::SYNCABLE_PREF },
51  */
52  { prefs::kLanguageChewingPhraseChoiceRearward, true, "phraseChoiceRearward",
53    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_PHRASE_CHOICE_REARWARD,
54    PrefRegistrySyncable::SYNCABLE_PREF },
55  { prefs::kLanguageChewingSpaceAsSelection, true, "spaceAsSelection",
56    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_SPACE_AS_SELECTION,
57    PrefRegistrySyncable::SYNCABLE_PREF },
58};
59COMPILE_ASSERT(kNumChewingBooleanPrefs == arraysize(kChewingBooleanPrefs),
60               TheSizeShouldMatch);
61
62const LanguageIntegerRangePreference kChewingIntegerPrefs[] = {
63  { prefs::kLanguageChewingMaxChiSymbolLen, 20, 8, 40, "maxChiSymbolLen",
64    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_MAX_CHI_SYMBOL_LEN,
65    PrefRegistrySyncable::SYNCABLE_PREF
66  },
67  { prefs::kLanguageChewingCandPerPage, 10, 8, 10, "candPerPage",
68    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SETTING_CAND_PER_PAGE,
69    PrefRegistrySyncable::SYNCABLE_PREF
70  },
71};
72COMPILE_ASSERT(kNumChewingIntegerPrefs == arraysize(kChewingIntegerPrefs),
73               TheSizeShouldMatch);
74
75const LanguageMultipleChoicePreference<const char*>
76    kChewingMultipleChoicePrefs[] = {
77  { prefs::kLanguageChewingKeyboardType,
78    "default",
79    "KBType",
80    {{ "default",
81       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_DEFAULT },
82     { "hsu", IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_HSU },
83     { "ibm", IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_IBM },
84     { "gin_yieh",
85       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_GIN_YIEH },
86     { "eten", IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_ETEN },
87     { "eten26", IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_ETEN26 },
88     { "dvorak", IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_DVORAK },
89     { "dvorak_hsu",
90       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_DVORAK_HSU },
91     { "dachen_26",
92       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_DACHEN_26 },
93     { "hanyu", IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE_HANYU }},
94    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_KEYBOARD_TYPE,
95    PrefRegistrySyncable::SYNCABLE_PREF,
96  },
97  { prefs::kLanguageChewingSelKeys,
98    "1234567890",
99    "selKeys",
100    {{ "1234567890",
101       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_1234567890 },
102     { "asdfghjkl;",
103       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_ASDFGHJKLS },
104     { "asdfzxcv89",
105       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_ASDFZXCV89 },
106     { "asdfjkl789",
107       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_ASDFJKL789 },
108     { "aoeu;qjkix",
109       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_AOEUSQJKIX },
110     { "aoeuhtnsid",
111       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_AOEUHTNSID },
112     { "aoeuidhtns",
113       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_AOEUIDHTNS },
114     { "1234qweras",
115       IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS_1234QWERAS }},
116    IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_SEL_KEYS,
117    PrefRegistrySyncable::SYNCABLE_PREF,
118  },
119};
120COMPILE_ASSERT(kNumChewingMultipleChoicePrefs ==
121               arraysize(kChewingMultipleChoicePrefs),
122               TheSizeShouldMatch);
123
124const LanguageMultipleChoicePreference<int> kChewingHsuSelKeyType = {
125  prefs::kLanguageChewingHsuSelKeyType,
126  1,
127  "hsuSelKeyType",
128  {{ 1, IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_HSU_SEL_KEY_TYPE_1 },
129   { 2, IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_HSU_SEL_KEY_TYPE_2 }},
130  IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_HSU_SEL_KEY_TYPE,
131  PrefRegistrySyncable::SYNCABLE_PREF,
132};
133
134// ---------------------------------------------------------------------------
135// For Korean input method (ibus-mozc-hangul)
136// ---------------------------------------------------------------------------
137const char kHangulSectionName[] = "engine/Hangul";
138const char kHangulKeyboardConfigName[] = "HangulKeyboard";
139
140const char kHangulHanjaBindingKeysConfigName[] = "HanjaKeyBindings";
141// Mozc-hangul treats Hangul_Hanja key as hanja key event even if it is not set.
142// We add Control+9 since F9 key is reserved by the window manager.
143// TODO(nona): Hanja keys are not configurable yet (and we're not sure if it
144// should.)
145const char kHangulHanjaBindingKeys[] = "F9,Ctrl 9";
146
147const HangulKeyboardNameIDPair kHangulKeyboardNameIDPairs[] = {
148  // We have to sync the |keyboard_id|s with those in libhangul.
149  { IDS_OPTIONS_SETTINGS_LANGUAGES_HANGUL_SETTINGS_KEYBOARD_2_SET, "2" },
150  { IDS_OPTIONS_SETTINGS_LANGUAGES_HANGUL_SETTINGS_KEYBOARD_3_SET_FINAL,
151    "3f" },
152  { IDS_OPTIONS_SETTINGS_LANGUAGES_HANGUL_SETTINGS_KEYBOARD_3_SET_390, "39" },
153  { IDS_OPTIONS_SETTINGS_LANGUAGES_HANGUL_SETTINGS_KEYBOARD_3_SET_NO_SHIFT,
154    "3s" },
155  { IDS_OPTIONS_SETTINGS_LANGUAGES_HANGUL_SETTINGS_KEYBOARD_ROMAJA, "ro" },
156  // We don't support "Sebeolsik 2 set" keyboard.
157};
158COMPILE_ASSERT(kNumHangulKeyboardNameIDPairs ==
159               arraysize(kHangulKeyboardNameIDPairs),
160               TheSizeShouldMatch);
161
162// ---------------------------------------------------------------------------
163// For Simplified Chinese input method (ibus-mozc-pinyin)
164// ---------------------------------------------------------------------------
165const char kPinyinSectionName[] = "engine/Pinyin";
166
167// We have to sync the |ibus_config_name|s with those in
168// ibus-mozc-pinyin/files/languages/pinyin/unix/ibus/config_updater.cc.
169const LanguageBooleanPrefs kPinyinBooleanPrefs[] = {
170  { prefs::kLanguagePinyinCorrectPinyin, true, "CorrectPinyin",
171    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_CORRECT_PINYIN,
172    PrefRegistrySyncable::SYNCABLE_PREF },
173  { prefs::kLanguagePinyinFuzzyPinyin, false, "FuzzyPinyin",
174    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_FUZZY_PINYIN,
175    PrefRegistrySyncable::SYNCABLE_PREF },
176  { prefs::kLanguagePinyinShiftSelectCandidate, false, "ShiftSelectCandidate",
177    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_SHIFT_SELECT_PINYIN,
178    PrefRegistrySyncable::SYNCABLE_PREF },
179  { prefs::kLanguagePinyinMinusEqualPage, true, "MinusEqualPage",
180    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_MINUS_EQUAL_PAGE,
181    PrefRegistrySyncable::SYNCABLE_PREF },
182  { prefs::kLanguagePinyinCommaPeriodPage, true, "CommaPeriodPage",
183    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_COMMA_PERIOD_PAGE,
184    PrefRegistrySyncable::SYNCABLE_PREF },
185  { prefs::kLanguagePinyinAutoCommit, false, "AutoCommit",
186    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_AUTO_COMMIT,
187    PrefRegistrySyncable::SYNCABLE_PREF },
188  { prefs::kLanguagePinyinDoublePinyin, false, "DoublePinyin",
189    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_DOUBLE_PINYIN,
190    PrefRegistrySyncable::SYNCABLE_PREF },
191  { prefs::kLanguagePinyinInitChinese, true, "InitChinese",
192    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_INIT_CHINESE,
193    PrefRegistrySyncable::SYNCABLE_PREF },
194  { prefs::kLanguagePinyinInitFull, false, "InitFull",
195    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_INIT_FULL,
196    PrefRegistrySyncable::SYNCABLE_PREF },
197  { prefs::kLanguagePinyinInitFullPunct, true, "InitFullPunct",
198    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_INIT_FULL_PUNCT,
199    PrefRegistrySyncable::SYNCABLE_PREF },
200  { prefs::kLanguagePinyinInitSimplifiedChinese, true, "InitSimplifiedChinese",
201    IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_SETTING_INIT_SIMPLIFIED_CHINESE,
202    PrefRegistrySyncable::SYNCABLE_PREF },
203  // TODO(yusukes): Support PINYIN_{INCOMPLETE,CORRECT,FUZZY}_... prefs (32
204  // additional boolean prefs.)
205};
206COMPILE_ASSERT(kNumPinyinBooleanPrefs == arraysize(kPinyinBooleanPrefs),
207               TheSizeShouldMatch);
208// TODO(yusukes): Support HalfWidthPuncts and IncompletePinyin prefs if needed.
209
210const LanguageMultipleChoicePreference<int> kPinyinDoublePinyinSchema = {
211  prefs::kLanguagePinyinDoublePinyinSchema,
212  0,
213  "DoublePinyinSchema",
214  {{ 0, IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_DOUBLE_SCHEMA_MSPY},
215   { 1, IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_DOUBLE_SCHEMA_ZRM},
216   { 2, IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_DOUBLE_SCHEMA_ABC},
217   { 3, IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_DOUBLE_SCHEMA_ZGPY},
218   { 4, IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_DOUBLE_SCHEMA_PYJJ}},
219  IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_DOUBLE_SCHEMA,
220  PrefRegistrySyncable::SYNCABLE_PREF,
221};
222
223const PinyinIntegerPref kPinyinIntegerPrefs[] = {
224  // TODO(yusukes): the type of lookup_table_page_size on ibus should be uint.
225  { prefs::kLanguagePinyinLookupTablePageSize,
226    5,
227    "LookupTablePageSize",
228
229    // don't sync as it's not user configurable.
230    PrefRegistrySyncable::UNSYNCABLE_PREF }
231};
232COMPILE_ASSERT(kNumPinyinIntegerPrefs == arraysize(kPinyinIntegerPrefs),
233               TheSizeShouldMatch);
234
235// ---------------------------------------------------------------------------
236// For Japanese input method (ibus-mozc)
237// ---------------------------------------------------------------------------
238const char kMozcSectionName[] = "engine/Mozc";
239
240const LanguageBooleanPrefs kMozcBooleanPrefs[] = {
241  { prefs::kLanguageMozcIncognitoMode,
242    false,
243    "incognito_mode",
244    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_INCOGNITO_MODE,
245    PrefRegistrySyncable::SYNCABLE_PREF },
246  { prefs::kLanguageMozcUseAutoImeTurnOff,
247    true,
248    "use_auto_ime_turn_off",
249    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_USE_AUTO_IME_TURN_OFF,
250    PrefRegistrySyncable::SYNCABLE_PREF },
251  { prefs::kLanguageMozcUseHistorySuggest,
252    true,
253    "use_history_suggest",
254    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_USE_HISTORY_SUGGEST,
255    PrefRegistrySyncable::SYNCABLE_PREF },
256  { prefs::kLanguageMozcUseDictionarySuggest,
257    true,
258    "use_dictionary_suggest",
259    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_USE_DICTIONARY_SUGGEST,
260    PrefRegistrySyncable::SYNCABLE_PREF },
261};
262COMPILE_ASSERT(kNumMozcBooleanPrefs == arraysize(kMozcBooleanPrefs),
263               TheSizeShouldMatch);
264
265extern const LanguageMultipleChoicePreference<const char*>
266    kMozcMultipleChoicePrefs[] = {
267  { prefs::kLanguageMozcPreeditMethod,
268    "ROMAN",
269    "preedit_method",
270    {{ "ROMAN", IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PREEDIT_METHOD_ROMAN },
271     { "KANA", IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PREEDIT_METHOD_KANA }},
272    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PREEDIT_METHOD,
273    PrefRegistrySyncable::SYNCABLE_PREF,
274  },
275  { prefs::kLanguageMozcSessionKeymap,
276    "MSIME",
277    "session_keymap",
278    {{ "ATOK", IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SESSION_KEYMAP_ATOK },
279     { "MSIME", IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SESSION_KEYMAP_MSIME },
280     { "KOTOERI", IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SESSION_KEYMAP_KOTOERI }},
281    // TODO: Support "CUSTOM" keymap.
282    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SESSION_KEYMAP,
283    PrefRegistrySyncable::SYNCABLE_PREF,
284  },
285  { prefs::kLanguageMozcPunctuationMethod,
286    "KUTEN_TOUTEN",
287    "punctuation_method",
288    {{ "KUTEN_TOUTEN",
289       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PUNCTUATION_METHOD_KUTEN_TOUTEN },
290     { "COMMA_PERIOD",
291       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PUNCTUATION_METHOD_COMMA_PERIOD },
292     { "KUTEN_PERIOD",
293       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PUNCTUATION_METHOD_KUTEN_PERIOD },
294     { "COMMA_TOUTEN",
295       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PUNCTUATION_METHOD_COMMA_TOUTEN }},
296    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_PUNCTUATION_METHOD,
297    PrefRegistrySyncable::SYNCABLE_PREF,
298  },
299  { prefs::kLanguageMozcSymbolMethod,
300    "CORNER_BRACKET_MIDDLE_DOT",
301    "symbol_method",
302    {{ "CORNER_BRACKET_MIDDLE_DOT",
303       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SYMBOL_METHOD_CORNER_BRACKET_MIDDLE_DOT },
304     { "SQUARE_BRACKET_SLASH",
305       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SYMBOL_METHOD_SQUARE_BRACKET_SLASH },
306     { "CORNER_BRACKET_SLASH",
307       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SYMBOL_METHOD_CORNER_BRACKET_SLASH },
308     { "SQUARE_BRACKET_MIDDLE_DOT",
309       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SYMBOL_METHOD_SQUARE_BRACKET_MIDDLE_DOT }},
310    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SYMBOL_METHOD,
311    PrefRegistrySyncable::SYNCABLE_PREF,
312  },
313  { prefs::kLanguageMozcSpaceCharacterForm,
314    "FUNDAMENTAL_INPUT_MODE",
315    "space_character_form",
316    {{ "FUNDAMENTAL_INPUT_MODE",
317       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SPACE_CHARACTER_FORM_FUNDAMENTAL_INPUT_MODE },
318     { "FUNDAMENTAL_FULL_WIDTH",
319       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SPACE_CHARACTER_FORM_FUNDAMENTAL_FULL_WIDTH },
320     { "FUNDAMENTAL_HALF_WIDTH",
321       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SPACE_CHARACTER_FORM_FUNDAMENTAL_HALF_WIDTH }},
322    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SPACE_CHARACTER_FORM,
323    PrefRegistrySyncable::SYNCABLE_PREF,
324  },
325  { prefs::kLanguageMozcHistoryLearningLevel,
326    "DEFAULT_HISTORY",
327    "history_learning_level",
328    {{ "DEFAULT_HISTORY",
329       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_HISTORY_LEARNING_LEVEL_DEFAULT_HISTORY },
330     { "READ_ONLY",
331       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_HISTORY_LEARNING_LEVEL_READ_ONLY },
332     { "NO_HISTORY",
333       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_HISTORY_LEARNING_LEVEL_NO_HISTORY }},
334    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_HISTORY_LEARNING_LEVEL,
335    PrefRegistrySyncable::SYNCABLE_PREF,
336  },
337  // TODO(mazda): Uncomment this block once the candidate window in Chrome OS
338  // supports changing shortcut labels.
339  // { prefs::kLanguageMozcSelectionShortcut,
340  //   "SHORTCUT_123456789",
341  //   "selection_shortcut",
342  //   {{ "NO_SHORTCUT",
343  //      IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SELECTION_SHORTCUT_NO_SHORTCUT },
344  //    { "SHORTCUT_123456789",
345  //      IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SELECTION_SHORTCUT_SHORTCUT_123456789 },
346  //    { "SHORTCUT_ASDFGHJKL",
347  //      IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SELECTION_SHORTCUT_SHORTCUT_ASDFGHJKL }},
348  //   IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SELECTION_SHORTCUT,
349  //   PrefRegistrySyncable::SYNCABLE_PREF,
350  // },
351  { prefs::kLanguageMozcShiftKeyModeSwitch,
352    "ASCII_INPUT_MODE",
353    "shift_key_mode_switch",
354    {{ "OFF",
355       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SHIFT_KEY_MODE_SWITCH_OFF },
356     { "ASCII_INPUT_MODE",
357       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SHIFT_KEY_MODE_SWITCH_ASCII_INPUT_MODE },
358     { "KATAKANA_INPUT_MODE",
359       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SHIFT_KEY_MODE_SWITCH_KATAKANA_INPUT_MODE }},
360    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SHIFT_KEY_MODE_SWITCH,
361    PrefRegistrySyncable::SYNCABLE_PREF,
362  },
363  { prefs::kLanguageMozcNumpadCharacterForm,
364    "NUMPAD_HALF_WIDTH",
365    "numpad_character_form",
366    {{ "NUMPAD_INPUT_MODE",
367       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_NUMPAD_CHARACTER_FORM_NUMPAD_INPUT_MODE },
368     { "NUMPAD_FULL_WIDTH",
369       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_NUMPAD_CHARACTER_FORM_NUMPAD_FULL_WIDTH },
370     { "NUMPAD_HALF_WIDTH",
371       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_NUMPAD_CHARACTER_FORM_NUMPAD_HALF_WIDTH },
372     { "NUMPAD_DIRECT_INPUT",
373       IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_NUMPAD_CHARACTER_FORM_NUMPAD_DIRECT_INPUT }},
374    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_NUMPAD_CHARACTER_FORM,
375    PrefRegistrySyncable::SYNCABLE_PREF,
376  },
377};
378COMPILE_ASSERT(kNumMozcMultipleChoicePrefs ==
379               arraysize(kMozcMultipleChoicePrefs),
380               TheSizeShouldMatch);
381
382const LanguageIntegerRangePreference kMozcIntegerPrefs[] = {
383  { prefs::kLanguageMozcSuggestionsSize, 3, 1, 9, "suggestions_size",
384    IDS_OPTIONS_SETTINGS_LANGUAGES_MOZC_SUGGESTIONS_SIZE,
385    PrefRegistrySyncable::SYNCABLE_PREF }
386};
387COMPILE_ASSERT(kNumMozcIntegerPrefs == arraysize(kMozcIntegerPrefs),
388               TheSizeShouldMatch);
389
390// ---------------------------------------------------------------------------
391// For keyboard stuff
392// ---------------------------------------------------------------------------
393const int kXkbAutoRepeatDelayInMs = 500;
394const int kXkbAutoRepeatIntervalInMs = 50;
395const char kPreferredKeyboardLayout[] = "PreferredKeyboardLayout";
396
397void RegisterPrefs(PrefRegistrySimple* registry) {
398  // We use an empty string here rather than a hardware keyboard layout name
399  // since input_method::GetHardwareInputMethodId() might return a fallback
400  // layout name if registry->RegisterStringPref(kHardwareKeyboardLayout)
401  // is not called yet.
402  registry->RegisterStringPref(kPreferredKeyboardLayout, "");
403}
404
405}  // namespace language_prefs
406}  // namespace chromeos
407