11use std:: {
22 borrow:: Cow ,
33 collections:: { HashMap , VecDeque } ,
4- env,
54 path:: Path ,
65} ;
76
@@ -71,16 +70,13 @@ pub struct IndexTargetConfig<'a> {
7170 deb_src : Vec < ( String , HashMap < String , String > ) > ,
7271 replacer : AhoCorasick ,
7372 native_arch : & ' a str ,
74- langs : Vec < Box < str > > ,
73+ langs : Vec < String > ,
7574}
7675
7776impl < ' a > IndexTargetConfig < ' a > {
7877 pub fn new ( config : & Config , native_arch : & ' a str ) -> Self {
79- let lang = env:: var ( "LANG" ) . map ( Cow :: Owned ) . unwrap_or ( "C" . into ( ) ) ;
80- let langs = get_matches_language ( & lang)
81- . into_iter ( )
82- . map ( Box :: from)
83- . collect :: < Vec < _ > > ( ) ;
78+ let locales = sys_locale:: get_locales ( ) ;
79+ let langs = get_matches_language ( locales) ;
8480
8581 Self {
8682 deb : get_index_target_tree ( config, "Acquire::IndexTargets::deb" ) ,
@@ -252,17 +248,23 @@ pub struct ChecksumDownloadEntry {
252248 pub msg : String ,
253249}
254250
255- fn get_matches_language ( env_lang : & str ) -> Vec < & str > {
251+ fn get_matches_language ( locales : impl IntoIterator < Item = String > ) -> Vec < String > {
256252 let mut langs = vec ! [ ] ;
257- let env_lang = env_lang. split_once ( '.' ) . map ( |x| x. 0 ) . unwrap_or ( env_lang) ;
258253
259- let lang = if env_lang == "C" { "en" } else { env_lang } ;
254+ for locale in locales {
255+ if locale. eq_ignore_ascii_case ( "c" ) {
256+ langs. push ( "en" . to_string ( ) ) ;
257+ continue ;
258+ }
259+
260+ // apt 数据库使用下划线来设置 translation 文件名
261+ let locale = locale. replace ( "-" , "_" ) ;
260262
261- langs. push ( lang) ;
263+ if let Some ( ( lang, _) ) = locale. split_once ( "_" ) {
264+ langs. push ( lang. to_lowercase ( ) ) ;
265+ }
262266
263- // en_US.UTF-8 => en
264- if let Some ( ( a, _) ) = lang. split_once ( '_' ) {
265- langs. push ( a) ;
267+ langs. push ( locale) ;
266268 }
267269
268270 langs
@@ -281,9 +283,15 @@ fn compress_file(name: &str) -> CompressFile {
281283
282284#[ test]
283285fn test_get_matches_language ( ) {
284- assert_eq ! ( get_matches_language( "C" ) , vec![ "en" ] ) ;
285- assert_eq ! ( get_matches_language( "zh_CN.UTF-8" ) , vec![ "zh_CN" , "zh" ] ) ;
286- assert_eq ! ( get_matches_language( "en_US.UTF-8" ) , vec![ "en_US" , "en" ] ) ;
286+ assert_eq ! ( get_matches_language( vec![ "C" . to_string( ) ] ) , vec![ "en" ] ) ;
287+ assert_eq ! (
288+ get_matches_language( vec![ "zh-CN" . to_string( ) ] ) ,
289+ vec![ "zh" , "zh_CN" ]
290+ ) ;
291+ assert_eq ! (
292+ get_matches_language( vec![ "en-US" . to_string( ) ] ) ,
293+ vec![ "en" , "en_US" ]
294+ ) ;
287295}
288296
289297#[ test]
0 commit comments