mirror of
https://github.com/bin456789/reinstall.git
synced 2026-10-03 22:17:46 +08:00
windows: 优化 iso 语言查找
This commit is contained in:
+44
-42
@@ -366,49 +366,51 @@ bash reinstall.sh windows \
|
|||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Supported languages</summary>
|
<summary> --lang list </summary>
|
||||||
|
|
||||||
```text
|
Supports these three language format codes. Case insensitive.
|
||||||
ar-sa
|
|
||||||
bg-bg
|
| CC Format | CC-CC Format | Language |
|
||||||
cs-cz
|
| - | - | - |
|
||||||
da-dk
|
| ar | ar-sa | Arabic |
|
||||||
de-de
|
| bg | bg-bg | Bulgarian |
|
||||||
el-gr
|
| cs | cs-cz | Czech |
|
||||||
en-gb
|
| da | da-dk | Danish |
|
||||||
en-us
|
| de | de-de | German |
|
||||||
es-es
|
| el | el-gr | Greek |
|
||||||
es-mx
|
| gb | en-gb | Eng_Intl |
|
||||||
et-ee
|
| en | en-us | English |
|
||||||
fi-fi
|
| es | es-es | Spanish |
|
||||||
fr-ca
|
| mx | es-mx | Spanish_Latam |
|
||||||
fr-fr
|
| et | et-ee | Estonian |
|
||||||
he-il
|
| fi | fi-fi | Finnish |
|
||||||
hr-hr
|
| | fr-ca | FrenchCanadian |
|
||||||
hu-hu
|
| fr | fr-fr | French |
|
||||||
it-it
|
| he | he-il | Hebrew |
|
||||||
ja-jp
|
| hr | hr-hr | Croatian |
|
||||||
ko-kr
|
| hu | hu-hu | Hungarian |
|
||||||
lt-lt
|
| it | it-it | Italian |
|
||||||
lv-lv
|
| ja | ja-jp | Japanese |
|
||||||
nb-no
|
| ko | ko-kr | Korean |
|
||||||
nl-nl
|
| lt | lt-lt | Lithuanian |
|
||||||
pl-pl
|
| lv | lv-lv | Latvian |
|
||||||
pt-pt
|
| no | nb-no | Norwegian |
|
||||||
pt-br
|
| nl | nl-nl | Dutch |
|
||||||
ro-ro
|
| pl | pl-pl | Polish |
|
||||||
ru-ru
|
| pp | pt-pt | Portuguese |
|
||||||
sk-sk
|
| pt | pt-br | Brazilian |
|
||||||
sl-si
|
| ro | ro-ro | Romanian |
|
||||||
sr-latn-rs
|
| ru | ru-ru | Russian |
|
||||||
sv-se
|
| sk | sk-sk | Slovak |
|
||||||
th-th
|
| sl | sl-si | Slovenian |
|
||||||
tr-tr
|
| sr | sr-latn / sr-latn-rs | Serbian_Latin |
|
||||||
uk-ua
|
| sv | sv-se | Swedish |
|
||||||
zh-cn
|
| th | th-th | Thai |
|
||||||
zh-hk
|
| tr | tr-tr | Turkish |
|
||||||
zh-tw
|
| uk | uk-ua | Ukrainian |
|
||||||
```
|
| cn | zh-cn | ChnSimp |
|
||||||
|
| tw | zh-tw | ChnTrad |
|
||||||
|
| hk | zh-hk | ChnTrad_Hong_Kong |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
@@ -366,49 +366,51 @@ bash reinstall.sh windows \
|
|||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>支持的语言</summary>
|
<summary> --lang 列表</summary>
|
||||||
|
|
||||||
```text
|
支持这三种语言代码格式,不区分大小写
|
||||||
ar-sa
|
|
||||||
bg-bg
|
| CC 格式 | CC-CC 格式 | 语言 |
|
||||||
cs-cz
|
| - | - | - |
|
||||||
da-dk
|
| ar | ar-sa | Arabic |
|
||||||
de-de
|
| bg | bg-bg | Bulgarian |
|
||||||
el-gr
|
| cs | cs-cz | Czech |
|
||||||
en-gb
|
| da | da-dk | Danish |
|
||||||
en-us
|
| de | de-de | German |
|
||||||
es-es
|
| el | el-gr | Greek |
|
||||||
es-mx
|
| gb | en-gb | Eng_Intl |
|
||||||
et-ee
|
| en | en-us | English |
|
||||||
fi-fi
|
| es | es-es | Spanish |
|
||||||
fr-ca
|
| mx | es-mx | Spanish_Latam |
|
||||||
fr-fr
|
| et | et-ee | Estonian |
|
||||||
he-il
|
| fi | fi-fi | Finnish |
|
||||||
hr-hr
|
| | fr-ca | FrenchCanadian |
|
||||||
hu-hu
|
| fr | fr-fr | French |
|
||||||
it-it
|
| he | he-il | Hebrew |
|
||||||
ja-jp
|
| hr | hr-hr | Croatian |
|
||||||
ko-kr
|
| hu | hu-hu | Hungarian |
|
||||||
lt-lt
|
| it | it-it | Italian |
|
||||||
lv-lv
|
| ja | ja-jp | Japanese |
|
||||||
nb-no
|
| ko | ko-kr | Korean |
|
||||||
nl-nl
|
| lt | lt-lt | Lithuanian |
|
||||||
pl-pl
|
| lv | lv-lv | Latvian |
|
||||||
pt-pt
|
| no | nb-no | Norwegian |
|
||||||
pt-br
|
| nl | nl-nl | Dutch |
|
||||||
ro-ro
|
| pl | pl-pl | Polish |
|
||||||
ru-ru
|
| pp | pt-pt | Portuguese |
|
||||||
sk-sk
|
| pt | pt-br | Brazilian |
|
||||||
sl-si
|
| ro | ro-ro | Romanian |
|
||||||
sr-latn-rs
|
| ru | ru-ru | Russian |
|
||||||
sv-se
|
| sk | sk-sk | Slovak |
|
||||||
th-th
|
| sl | sl-si | Slovenian |
|
||||||
tr-tr
|
| sr | sr-latn / sr-latn-rs | Serbian_Latin |
|
||||||
uk-ua
|
| sv | sv-se | Swedish |
|
||||||
zh-cn
|
| th | th-th | Thai |
|
||||||
zh-hk
|
| tr | tr-tr | Turkish |
|
||||||
zh-tw
|
| uk | uk-ua | Ukrainian |
|
||||||
```
|
| cn | zh-cn | ChnSimp |
|
||||||
|
| tw | zh-tw | ChnTrad |
|
||||||
|
| hk | zh-hk | ChnTrad_Hong_Kong |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
+126
-86
@@ -732,99 +732,127 @@ assert_cpu_supports_x86_64_v3() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# sr-latn-rs 到 sr-latn
|
# 判断语言字符是否合法,允许全名和缩写
|
||||||
en_us() {
|
is_valid_lang_chars() {
|
||||||
echo "$lang" | awk -F- '{print $1"-"$2}'
|
[[ "$1" =~ ^[A-Za-z_-]+$ ]]
|
||||||
|
|
||||||
# zh-hk 可回落到 zh-tw
|
|
||||||
if [ "$lang" = zh-hk ]; then
|
|
||||||
echo zh-tw
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# fr-ca 到 ca
|
lang_convert() {
|
||||||
us() {
|
local out_format=$1
|
||||||
# 葡萄牙准确对应 pp
|
local in=$lang
|
||||||
if [ "$lang" = pt-pt ]; then
|
|
||||||
echo pp
|
if ! is_valid_lang_chars "$in"; then
|
||||||
return
|
|
||||||
fi
|
|
||||||
# 巴西准确对应 pt
|
|
||||||
if [ "$lang" = pt-br ]; then
|
|
||||||
echo pt
|
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$lang" | awk -F- '{print $2}'
|
# 如果是 fallback_ 开头的,先得到 fallback 后的 cc-cc
|
||||||
|
if [[ "$out_format" = fallback_* ]]; then
|
||||||
# hk 额外回落到 tw
|
in=$(lang_convert_inner "$in" fallback_cc-cc)
|
||||||
if [ "$lang" = zh-hk ]; then
|
# 如果要输出 fallback_cc-cc ,直接输出
|
||||||
echo tw
|
if [ "$out_format" = fallback_cc-cc ]; then
|
||||||
fi
|
printf '%s' "$in"
|
||||||
}
|
|
||||||
|
|
||||||
# fr-ca 到 fr-fr
|
|
||||||
en_en() {
|
|
||||||
echo "$lang" | awk -F- '{print $1"-"$1}'
|
|
||||||
|
|
||||||
# en-gb 额外回落到 en-us
|
|
||||||
if [ "$lang" = en-gb ]; then
|
|
||||||
echo en-us
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# fr-ca 到 fr
|
|
||||||
en() {
|
|
||||||
# 巴西/葡萄牙回落到葡萄牙语
|
|
||||||
if [ "$lang" = pt-br ] || [ "$lang" = pt-pt ]; then
|
|
||||||
echo "pp"
|
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
# 去除 fallback_ 前缀
|
||||||
|
out_format=${out_format#fallback_}
|
||||||
|
fi
|
||||||
|
|
||||||
echo "$lang" | awk -F- '{print $1}'
|
# 尝试转换成目标格式
|
||||||
}
|
local out
|
||||||
|
out=$(lang_convert_inner "$in" "$out_format")
|
||||||
|
|
||||||
english() {
|
# 如果转换成功,则表示输入的语言在列表里面
|
||||||
case "$lang" in
|
if [ -n "$out" ]; then
|
||||||
ar-sa) echo Arabic ;;
|
printf '%s' "$out"
|
||||||
bg-bg) echo Bulgarian ;;
|
else
|
||||||
cs-cz) echo Czech ;;
|
# 如果没有,则手动截取
|
||||||
da-dk) echo Danish ;;
|
case "$out_format" in
|
||||||
de-de) echo German ;;
|
cc) cut -d- -f1 <<<"$in" ;;
|
||||||
el-gr) echo Greek ;;
|
cc-cc) cut -d- -f1-2 <<<"$in" ;;
|
||||||
en-gb) echo Eng_Intl ;;
|
cc-cc-cc) cut -d- -f1-3 <<<"$in" ;;
|
||||||
en-us) echo English ;;
|
|
||||||
es-es) echo Spanish ;;
|
|
||||||
es-mx) echo Spanish_Latam ;;
|
|
||||||
et-ee) echo Estonian ;;
|
|
||||||
fi-fi) echo Finnish ;;
|
|
||||||
fr-ca) echo FrenchCanadian ;;
|
|
||||||
fr-fr) echo French ;;
|
|
||||||
he-il) echo Hebrew ;;
|
|
||||||
hr-hr) echo Croatian ;;
|
|
||||||
hu-hu) echo Hungarian ;;
|
|
||||||
it-it) echo Italian ;;
|
|
||||||
ja-jp) echo Japanese ;;
|
|
||||||
ko-kr) echo Korean ;;
|
|
||||||
lt-lt) echo Lithuanian ;;
|
|
||||||
lv-lv) echo Latvian ;;
|
|
||||||
nb-no) echo Norwegian ;;
|
|
||||||
nl-nl) echo Dutch ;;
|
|
||||||
pl-pl) echo Polish ;;
|
|
||||||
pt-pt) echo Portuguese ;;
|
|
||||||
pt-br) echo Brazilian ;;
|
|
||||||
ro-ro) echo Romanian ;;
|
|
||||||
ru-ru) echo Russian ;;
|
|
||||||
sk-sk) echo Slovak ;;
|
|
||||||
sl-si) echo Slovenian ;;
|
|
||||||
sr-latn | sr-latn-rs) echo Serbian_Latin ;;
|
|
||||||
sv-se) echo Swedish ;;
|
|
||||||
th-th) echo Thai ;;
|
|
||||||
tr-tr) echo Turkish ;;
|
|
||||||
uk-ua) echo Ukrainian ;;
|
|
||||||
zh-cn) echo ChnSimp ;;
|
|
||||||
zh-hk | zh-tw) echo ChnTrad ;;
|
|
||||||
esac
|
esac
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
lang_convert_inner() {
|
||||||
|
local in=$1
|
||||||
|
local out_format=$2
|
||||||
|
|
||||||
|
if ! is_valid_lang_chars "$in"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 可能得到 / ,用 is_valid_lang_chars 过滤掉
|
||||||
|
local out
|
||||||
|
if out=$(
|
||||||
|
lang_map_with_head | sed 1d | to_lower | awk \
|
||||||
|
-v val="$in" \
|
||||||
|
-v c1="$(get_col_number cc)" \
|
||||||
|
-v c2="$(get_col_number cc-cc)" \
|
||||||
|
-v c3="$(get_col_number cc-cc-cc)" \
|
||||||
|
-v c4="$(get_col_number full_language)" \
|
||||||
|
-v cout="$(get_col_number "$out_format")" \
|
||||||
|
'$c1 == val || $c2 == val || $c3 == val || $c4 == val { print $cout }'
|
||||||
|
) && is_valid_lang_chars "$out"; then
|
||||||
|
printf '%s' "$out"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_col_number() {
|
||||||
|
local col_name=$1
|
||||||
|
|
||||||
|
# 找出第一行,用 xargs -n 1 转成列,然后用 grep 找到行号,再用 cut 取出行号
|
||||||
|
lang_map_with_head | head -1 | xargs -n 1 | grep -Fxn "$col_name" | cut -d: -f1
|
||||||
|
}
|
||||||
|
|
||||||
|
lang_map_with_head() {
|
||||||
|
# 没有 gb mx 开头的镜像,列出它们作用是,用户输入时识别成 en-gb es-mx
|
||||||
|
# ca 并非对应 fr-ca
|
||||||
|
# pt 对应 pt-br,而不是 pt-pt
|
||||||
|
# uk 对应乌克兰语而不是英国,如果用户输入 uk ,要识别成乌克兰
|
||||||
|
# 第 5 列是可回落的语言
|
||||||
|
cat <<EOF
|
||||||
|
cc cc-cc cc-cc-cc full_language fallback_cc-cc
|
||||||
|
ar ar-sa / Arabic
|
||||||
|
bg bg-bg / Bulgarian
|
||||||
|
cs cs-cz / Czech
|
||||||
|
da da-dk / Danish
|
||||||
|
de de-de / German
|
||||||
|
el el-gr / Greek
|
||||||
|
gb en-gb / Eng_Intl en-us
|
||||||
|
en en-us / English
|
||||||
|
es es-es / Spanish
|
||||||
|
mx es-mx / Spanish_Latam
|
||||||
|
et et-ee / Estonian
|
||||||
|
fi fi-fi / Finnish
|
||||||
|
/ fr-ca / FrenchCanadian fr-fr
|
||||||
|
fr fr-fr / French
|
||||||
|
he he-il / Hebrew
|
||||||
|
hr hr-hr / Croatian
|
||||||
|
hu hu-hu / Hungarian
|
||||||
|
it it-it / Italian
|
||||||
|
ja ja-jp / Japanese
|
||||||
|
ko ko-kr / Korean
|
||||||
|
lt lt-lt / Lithuanian
|
||||||
|
lv lv-lv / Latvian
|
||||||
|
no nb-no / Norwegian
|
||||||
|
nl nl-nl / Dutch
|
||||||
|
pl pl-pl / Polish
|
||||||
|
pp pt-pt / Portuguese
|
||||||
|
pt pt-br / Brazilian pt-pt
|
||||||
|
ro ro-ro / Romanian
|
||||||
|
ru ru-ru / Russian
|
||||||
|
sk sk-sk / Slovak
|
||||||
|
sl sl-si / Slovenian
|
||||||
|
sr sr-latn sr-latn-rs Serbian_Latin
|
||||||
|
sv sv-se / Swedish
|
||||||
|
th th-th / Thai
|
||||||
|
tr tr-tr / Turkish
|
||||||
|
uk uk-ua / Ukrainian
|
||||||
|
cn zh-cn / ChnSimp
|
||||||
|
tw zh-tw / ChnTrad
|
||||||
|
hk zh-hk / ChnTrad_Hong_Kong zh-tw
|
||||||
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_windows_image_name() {
|
parse_windows_image_name() {
|
||||||
@@ -890,9 +918,15 @@ find_windows_iso() {
|
|||||||
if [ -z "$lang" ]; then
|
if [ -z "$lang" ]; then
|
||||||
lang=en-us
|
lang=en-us
|
||||||
fi
|
fi
|
||||||
langs="$lang $(en_us) $(us) $(en_en) $(en)"
|
|
||||||
langs=$(echo "$langs" | xargs -n 1 | awk '!seen[$0]++')
|
# 用户输入的语言最优先
|
||||||
full_lang=$(english)
|
langs=$lang
|
||||||
|
langs+=" $(lang_convert cc-cc-cc) $(lang_convert cc-cc) $(lang_convert cc)"
|
||||||
|
langs+=" $(lang_convert fallback_cc-cc-cc) $(lang_convert fallback_cc-cc) $(lang_convert fallback_cc)"
|
||||||
|
langs=$(xargs -n 1 <<<"$langs" | awk '!seen[$0]++' | xargs)
|
||||||
|
|
||||||
|
full_langs="$(lang_convert full_language) $(lang_convert fallback_full_language)"
|
||||||
|
full_langs=$(xargs -n 1 <<<"$full_langs" | awk '!seen[$0]++' | xargs)
|
||||||
|
|
||||||
case "$basearch" in
|
case "$basearch" in
|
||||||
x86) # 备用,查找功能目前不支持 32 位
|
x86) # 备用,查找功能目前不支持 32 位
|
||||||
@@ -1085,6 +1119,7 @@ get_windows_iso_link() {
|
|||||||
echo "Label msdl: $label_msdl"
|
echo "Label msdl: $label_msdl"
|
||||||
echo "Label vlsc: $label_vlsc"
|
echo "Label vlsc: $label_vlsc"
|
||||||
echo "Page: $page_url"
|
echo "Page: $page_url"
|
||||||
|
echo "Languages: $langs $full_langs"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 先判断是否能自动查找该版本
|
# 先判断是否能自动查找该版本
|
||||||
@@ -1210,6 +1245,7 @@ get_windows_iso_link_inner() {
|
|||||||
|
|
||||||
# 先判断 full_lang 是否为空
|
# 先判断 full_lang 是否为空
|
||||||
# 因为假如用户输入的 lang 不正确,full_lang 就为空,正则表达式就无法只匹配当前语言
|
# 因为假如用户输入的 lang 不正确,full_lang 就为空,正则表达式就无法只匹配当前语言
|
||||||
|
for full_lang in $full_langs; do
|
||||||
if [ -n "$label_vlsc" ] && [ -n "$full_lang" ]; then
|
if [ -n "$label_vlsc" ] && [ -n "$full_lang" ]; then
|
||||||
regexs+=("sw_?dvd[59]_win_?${label_vlsc}_?${version}_.*${arch_win_vlsc}.*_${full_lang}.*.(iso|img)")
|
regexs+=("sw_?dvd[59]_win_?${label_vlsc}_?${version}_.*${arch_win_vlsc}.*_${full_lang}.*.(iso|img)")
|
||||||
regexs+=("sw_?dvd[59]_win_?${version}_${label_vlsc}_?.*${arch_win_vlsc}.*_${full_lang}.*.(iso|img)")
|
regexs+=("sw_?dvd[59]_win_?${version}_${label_vlsc}_?.*${arch_win_vlsc}.*_${full_lang}.*.(iso|img)")
|
||||||
@@ -1220,6 +1256,7 @@ get_windows_iso_link_inner() {
|
|||||||
regexs+=("sw_?dvd[59]_win_?${label_vlsc}_?.*${arch_win_vlsc}.*_${full_lang}.*.(iso|img)")
|
regexs+=("sw_?dvd[59]_win_?${label_vlsc}_?.*${arch_win_vlsc}.*_${full_lang}.*.(iso|img)")
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# 查找
|
# 查找
|
||||||
for regex in "${regexs[@]}"; do
|
for regex in "${regexs[@]}"; do
|
||||||
@@ -4897,6 +4934,9 @@ EOF
|
|||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
--lang)
|
--lang)
|
||||||
|
if ! is_valid_lang_chars "$2"; then
|
||||||
|
error_and_exit "Invalid $1 value: $2"
|
||||||
|
fi
|
||||||
lang=$(echo "$2" | to_lower)
|
lang=$(echo "$2" | to_lower)
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
|||||||
Reference in New Issue
Block a user