Skip to content

Commit 662a929

Browse files
committed
[add] : Added locale.sh
1 parent a416ad9 commit 662a929

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

tools/locale.sh

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
script_path="$( cd -P "$( dirname "$(readlink -f "$0")" )" && cd .. && pwd )"
6+
mode=""
7+
arch=""
8+
channel=""
9+
locale=""
10+
11+
_help() {
12+
echo "usage ${0} [options] [command]"
13+
echo
14+
echo "Scripts that perform locale-related processing "
15+
echo
16+
echo " General command:"
17+
echo " check [name] Determine if the locale is available"
18+
echo " show Shows a list of available locales"
19+
echo " get [name] Prints the specified locale settings"
20+
echo " help This help message"
21+
echo
22+
echo " General options:"
23+
echo " -a | --arch [arch] Specify the architecture"
24+
echo " -c | --channel Specify the channel"
25+
echo " -h | --help This help message"
26+
}
27+
28+
# Usage: getclm <number>
29+
# 標準入力から値を受けとり、引数で指定された列を抽出します。
30+
getclm() {
31+
echo "$(cat -)" | cut -d " " -f "${1}"
32+
}
33+
34+
# Message functions
35+
msg_error() {
36+
"${script_path}/tools/msg.sh" -a "locale.sh" error "${1}"
37+
}
38+
39+
gen_locale_list() {
40+
if [[ -z "${arch}" ]]; then
41+
msg_error "No architecture specified."
42+
exit 1
43+
fi
44+
local _locale
45+
for _locale in $(grep -h -v ^'#' "${script_path}/system/locale-${arch}" | getclm 1); do
46+
localelist+=("${_locale}")
47+
done
48+
}
49+
50+
check() {
51+
gen_locale_list
52+
if [[ ! "${#}" = "1" ]]; then
53+
_help
54+
exit 1
55+
fi
56+
if [[ $(printf '%s\n' "${localelist[@]}" | grep -qx "${1}"; echo -n ${?} ) -eq 0 ]]; then
57+
echo "correct"
58+
else
59+
echo "incorrect"
60+
fi
61+
}
62+
63+
show() {
64+
gen_locale_list
65+
if (( "${#localelist[*]}" > 0)); then
66+
echo "${localelist[*]}"
67+
fi
68+
}
69+
70+
get() {
71+
gen_locale_list
72+
if [[ ! "${#}" = "1" ]]; then
73+
_help
74+
exit 1
75+
fi
76+
77+
#-- ロケールを解析、設定 --#
78+
local _get_locale_line_number _locale_config_file _locale_name_list _locale_line_number _locale_config_line
79+
80+
# 選択されたロケールの設定が描かれた行番号を取得
81+
_locale_config_file="${script_path}/system/locale-${arch}"
82+
_locale_name_list=($(cat "${_locale_config_file}" | grep -h -v ^'#' | awk '{print $1}'))
83+
_get_locale_line_number() {
84+
local _lang _count=0
85+
for _lang in ${_locale_name_list[@]}; do
86+
_count=$(( _count + 1 ))
87+
if [[ "${_lang}" = "${1}" ]]; then echo "${_count}"; return 0; fi
88+
done
89+
echo -n "failed"
90+
}
91+
_locale_line_number="$(_get_locale_line_number ${@})"
92+
93+
# 不正なロケール名なら終了する
94+
if [[ "${_locale_line_number}" = "failed" ]]; then
95+
msg_error "${1} is not a valid language."
96+
exit 1
97+
fi
98+
99+
# ロケール設定ファイルから該当の行を抽出
100+
_locale_config_line=($(cat "${_locale_config_file}" | grep -h -v ^'#' | grep -v ^$ | head -n "${_locale_line_number}" | tail -n 1))
101+
102+
# 抽出された行に書かれた設定をそれぞれの変数に代入
103+
# ここで定義された変数のみがグローバル変数
104+
cat << EOF
105+
locale_name="${_locale_config_line[0]}"
106+
locale_gen_name="${_locale_config_line[1]}"
107+
locale_version="${_locale_config_line[2]}"
108+
locale_time="${_locale_config_line[3]}"
109+
locale_fullname="${_locale_config_line[4]}"
110+
EOF
111+
}
112+
113+
# Parse options
114+
ARGUMENT="${@}"
115+
_opt_short="a:c:h"
116+
_opt_long="arch:,channel:,help"
117+
OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- ${ARGUMENT})
118+
[[ ${?} != 0 ]] && exit 1
119+
120+
eval set -- "${OPT}"
121+
unset OPT _opt_short _opt_long
122+
123+
while true; do
124+
case ${1} in
125+
-a | --arch)
126+
arch="${2}"
127+
shift 2
128+
;;
129+
-c | --channel)
130+
channel="${2}"
131+
shift 2
132+
;;
133+
-h | --help)
134+
_help
135+
exit 0
136+
;;
137+
--)
138+
shift 1
139+
break
140+
;;
141+
142+
esac
143+
done
144+
145+
if [[ -z "${1}" ]]; then
146+
_help
147+
exit 1
148+
else
149+
mode="${1}"
150+
shift 1
151+
fi
152+
153+
case "${mode}" in
154+
"check" ) check ${@} ;;
155+
"show" ) show ;;
156+
"get" ) get ${@} ;;
157+
"help" ) _help; exit 0 ;;
158+
* ) _help; exit 1 ;;
159+
esac

0 commit comments

Comments
 (0)