Drop custom translation handling
xkb layouts are translated fine by libgnome-desktop. If not we should go fixing there since that makes keyboard layout strings consistent with e.g. gnome-control-center. There weren't any 'exotic' strings in the current translations so what we get from libgnome-desktop should be just fine.
This commit is contained in:
@ -5,9 +5,7 @@ use gtk;
|
||||
use std::ffi::CString;
|
||||
use std::cmp::Ordering;
|
||||
use ::layout::c::{ Bounds, EekGtkKeyboard };
|
||||
use ::locale;
|
||||
use ::locale::{ OwnedTranslation, Translation, compare_current_locale };
|
||||
use ::locale_config::system_locale;
|
||||
use ::locale::{ OwnedTranslation, compare_current_locale };
|
||||
use ::logging;
|
||||
use ::manager;
|
||||
use ::resources;
|
||||
@ -209,13 +207,8 @@ fn get_current_layout(
|
||||
/// Translates all provided layout names according to current locale,
|
||||
/// for the purpose of display (i.e. errors will be caught and reported)
|
||||
fn translate_layout_names(layouts: &Vec<LayoutId>) -> Vec<OwnedTranslation> {
|
||||
// This procedure is rather ugly...
|
||||
// Xkb lookup *must not* be applied to non-system layouts,
|
||||
// so both translators can't be merged into one lookup table,
|
||||
// therefore must be done in two steps.
|
||||
// `XkbInfo` being temporary also means
|
||||
// that its return values must be copied,
|
||||
// forcing the use of `OwnedTranslation`.
|
||||
// `XkbInfo` being temporary means that its return values must be
|
||||
// copied, forcing the use of `OwnedTranslation`.
|
||||
enum Status {
|
||||
/// xkb names should get all translated here
|
||||
Translated(OwnedTranslation),
|
||||
@ -224,7 +217,7 @@ fn translate_layout_names(layouts: &Vec<LayoutId>) -> Vec<OwnedTranslation> {
|
||||
}
|
||||
|
||||
// Attempt to take all xkb names from gnome-desktop's xkb info.
|
||||
let xkb_translator = locale::XkbInfo::new();
|
||||
let xkb_translator = ::locale::XkbInfo::new();
|
||||
|
||||
let translated_names = layouts.iter()
|
||||
.map(|id| match id {
|
||||
@ -236,44 +229,15 @@ fn translate_layout_names(layouts: &Vec<LayoutId>) -> Vec<OwnedTranslation> {
|
||||
&format!("No display name for xkb layout {}", name),
|
||||
).unwrap_or_else(|| Status::Remaining(name.clone()))
|
||||
},
|
||||
LayoutId::Local(name) => Status::Remaining(name.clone()),
|
||||
LayoutId::Local (_) => unreachable!(),
|
||||
});
|
||||
|
||||
// Weird xkb layouts still need to be looked up in the internal database.
|
||||
let builtin_translations = system_locale()
|
||||
.map(|locale|
|
||||
locale.tags_for("messages")
|
||||
.next().unwrap() // guaranteed to exist
|
||||
.as_ref()
|
||||
.to_owned()
|
||||
)
|
||||
.or_print(logging::Problem::Surprise, "No locale detected")
|
||||
.and_then(|lang| {
|
||||
resources::get_layout_names(lang.as_str())
|
||||
});
|
||||
|
||||
match builtin_translations {
|
||||
Some(translations) => {
|
||||
translated_names
|
||||
.map(|status| match status {
|
||||
Status::Remaining(name) => {
|
||||
translations.get(name.as_str())
|
||||
.unwrap_or(&Translation(name.as_str()))
|
||||
.to_owned()
|
||||
},
|
||||
Status::Translated(t) => t,
|
||||
})
|
||||
.collect()
|
||||
},
|
||||
None => {
|
||||
translated_names
|
||||
.map(|status| match status {
|
||||
Status::Remaining(name) => OwnedTranslation(name),
|
||||
Status::Translated(t) => t,
|
||||
})
|
||||
.collect()
|
||||
},
|
||||
}
|
||||
translated_names
|
||||
.map(|status| match status {
|
||||
Status::Remaining(name) => OwnedTranslation(name),
|
||||
Status::Translated(t) => t,
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub fn show(
|
||||
|
||||
Reference in New Issue
Block a user