pub fn language_string(language: u16) -> String {
let mut lang: [u16; 3] = [0; 3];
lang[0] = ((language >> 10) & 0x1F) + 0x60;
lang[1] = ((language >> 5) & 0x1F) + 0x60;
lang[2] = ((language) & 0x1F) + 0x60;
String::from_utf16_lossy(&lang)
}
pub fn language_code(language: &str) -> u16 {
let mut lang = language.encode_utf16();
let mut code = (lang.next().unwrap_or(0) & 0x1F) << 10;
code += (lang.next().unwrap_or(0) & 0x1F) << 5;
code += lang.next().unwrap_or(0) & 0x1F;
code
}
#[cfg(test)]
mod tests {
use super::*;
fn test_language_code(lang: &str) {
let code = language_code(lang);
let lang2 = language_string(code);
assert_eq!(lang, lang2);
}
#[test]
fn test_language_codes() {
test_language_code("und");
test_language_code("eng");
test_language_code("kor");
}
}