1
|
#!/bin/sh
|
2
|
# Functions which runs commands on the system
|
3
|
|
4
|
. ${BACKEND}/functions.sh
|
5
|
. ${BACKEND}/functions-parse.sh
|
6
|
|
7
|
|
8
|
# Function which localizes a FreeBSD install
|
9
|
localize_freebsd()
|
10
|
{
|
11
|
sed -i.bak "s/lang=en_US/lang=${LOCALE}/g" ${FSMNT}/etc/login.conf
|
12
|
rm ${FSMNT}/etc/login.conf.bak
|
13
|
};
|
14
|
|
15
|
|
16
|
# Function which localizes a PC-BSD install
|
17
|
localize_pcbsd()
|
18
|
{
|
19
|
#Change the skel files
|
20
|
##########################################################################
|
21
|
sed -i.bak "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals
|
22
|
sed -i.bak "s/Country=us/Country=${COUNTRY}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals
|
23
|
sed -i.bak "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/usr/share/skel/.kde4/share/config/kdeglobals
|
24
|
sed -i.bak "s/Language=en_US/Language=${SETLANG}:${LOCALE}/g" ${FSMNT}/root/.kde4/share/config/kdeglobals
|
25
|
|
26
|
#Change KDM Langs
|
27
|
##########################################################################
|
28
|
sed -i.bak "s/Language=en_US/Language=${LOCALE}.UTF-8/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc
|
29
|
|
30
|
# Check if we have a localized splash screen and copy it
|
31
|
if [ -e "${FSMNT}/usr/PCBSD/splash-screens/loading-screen-${SETLANG}.pcx" ]
|
32
|
then
|
33
|
cp ${FSMNT}/usr/PCBSD/splash-screens/loading-screen-${SETLANG}.pcx ${FSMNT}/boot/loading-screen.pcx
|
34
|
fi
|
35
|
|
36
|
};
|
37
|
|
38
|
localize_x_keyboard()
|
39
|
{
|
40
|
KEYMOD="$1"
|
41
|
KEYLAY="$2"
|
42
|
KEYVAR="$3"
|
43
|
COUNTRY="$4"
|
44
|
SETXKBMAP=""
|
45
|
|
46
|
if [ "${COUNTRY}" = "NONE" ] || [ "${COUNTRY}" = "us" ];
|
47
|
then
|
48
|
#In this case we don't need any additional language
|
49
|
COUNTRY=""
|
50
|
else
|
51
|
COUNTRY=",${COUNTRY}"
|
52
|
fi
|
53
|
|
54
|
if [ "${KEYMOD}" != "NONE" ]
|
55
|
then
|
56
|
SETXKBMAP="-model ${KEYMOD}"
|
57
|
KXMODEL="${KEYMOD}"
|
58
|
else
|
59
|
KXMODEL="pc104"
|
60
|
fi
|
61
|
|
62
|
if [ "${KEYLAY}" != "NONE" ]
|
63
|
then
|
64
|
localize_key_layout "$KEYLAY"
|
65
|
SETXKBMAP="${SETXKBMAP} -layout ${KEYLAY}"
|
66
|
KXLAYOUT="${KEYLAY}"
|
67
|
else
|
68
|
KXLAYOUT="us"
|
69
|
fi
|
70
|
|
71
|
if [ "${KEYVAR}" != "NONE" ]
|
72
|
then
|
73
|
SETXKBMAP="${SETXKBMAP} -variant ${KEYVAR}"
|
74
|
KXVAR="(${KEYVAR})"
|
75
|
else
|
76
|
KXVAR=""
|
77
|
fi
|
78
|
|
79
|
# Setup .xprofile with our setxkbmap call now
|
80
|
if [ ! -z "${SETXKBMAP}" ]
|
81
|
then
|
82
|
if [ ! -e "${FSMNT}/usr/share/skel/.xprofile" ]
|
83
|
then
|
84
|
echo "#!/bin/sh" >${FSMNT}/usr/share/skel/.xprofile
|
85
|
fi
|
86
|
|
87
|
# Save the keyboard layout for user / root X logins
|
88
|
echo "setxkbmap ${SETXKBMAP}" >>${FSMNT}/usr/share/skel/.xprofile
|
89
|
chmod 755 ${FSMNT}/usr/share/skel/.xprofile
|
90
|
cp ${FSMNT}/usr/share/skel/.xprofile ${FSMNT}/root/.xprofile
|
91
|
|
92
|
# Save it for KDM
|
93
|
echo "setxkbmap ${SETXKBMAP}" >>${FSMNT}/usr/local/kde4/share/config/kdm/Xsetup
|
94
|
fi
|
95
|
|
96
|
|
97
|
# Create the kxkbrc configuration using these options
|
98
|
echo "[Layout]
|
99
|
DisplayNames=${KXLAYOUT}${COUNTRY}
|
100
|
IndicatorOnly=false
|
101
|
LayoutList=${KXLAYOUT}${KXVAR}${COUNTRY}
|
102
|
Model=${KXMODEL}
|
103
|
Options=
|
104
|
ResetOldOptions=true
|
105
|
ShowFlag=true
|
106
|
ShowSingle=false
|
107
|
SwitchMode=WinClass
|
108
|
Use=true " >${FSMNT}/usr/share/skel/.kde4/share/config/kxkbrc
|
109
|
|
110
|
};
|
111
|
|
112
|
localize_key_layout()
|
113
|
{
|
114
|
|
115
|
KEYLAYOUT="$1"
|
116
|
|
117
|
# Set the keylayout in rc.conf
|
118
|
case ${KEYLAYOUT} in
|
119
|
am) KEYLAYOUT_CONSOLE="hy.armscii-8" ;;
|
120
|
ch) KEYLAYOUT_CONSOLE="swissgerman.iso" ;;
|
121
|
cz) KEYLAYOUT_CONSOLE="cz.iso2" ;;
|
122
|
de) KEYLAYOUT_CONSOLE="german.iso" ;;
|
123
|
dk) KEYLAYOUT_CONSOLE="danish.iso" ;;
|
124
|
ee) KEYLAYOUT_CONSOLE="estonian.iso" ;;
|
125
|
es) KEYLAYOUT_CONSOLE="spanish.iso" ;;
|
126
|
fi) KEYLAYOUT_CONSOLE="finnish.iso" ;;
|
127
|
is) KEYLAYOUT_CONSOLE="icelandic.iso" ;;
|
128
|
jp) KEYLAYOUT_CONSOLE="jp.106" ;;
|
129
|
nl) KEYLAYOUT_CONSOLE="dutch.iso.acc" ;;
|
130
|
no) KEYLAYOUT_CONSOLE="norwegian.iso" ;;
|
131
|
pl) KEYLAYOUT_CONSOLE="pl_PL.ISO8859-2" ;;
|
132
|
ru) KEYLAYOUT_CONSOLE="ru.koi8-r" ;;
|
133
|
sk) KEYLAYOUT_CONSOLE="sk.iso2" ;;
|
134
|
se) KEYLAYOUT_CONSOLE="swedish.iso" ;;
|
135
|
tr) KEYLAYOUT_CONSOLE="tr.iso9.q" ;;
|
136
|
gb) KEYLAYOUT_CONSOLE="uk.iso" ;;
|
137
|
*) if [ ! -z "${KEYLAYOUT}" ]
|
138
|
then
|
139
|
KEYLAYOUT_CONSOLE="${KEYLAYOUT}.iso"
|
140
|
fi
|
141
|
;;
|
142
|
esac
|
143
|
|
144
|
if [ ! -z "${KEYLAYOUT_CONSOLE}" ]
|
145
|
then
|
146
|
echo "keymap=\"${KEYLAYOUT_CONSOLE}\"" >>${FSMNT}/etc/rc.conf
|
147
|
fi
|
148
|
|
149
|
};
|
150
|
|
151
|
# Function which prunes other l10n files from the KDE install
|
152
|
localize_prune_langs()
|
153
|
{
|
154
|
get_value_from_cfg localizeLang
|
155
|
KEEPLANG="$VAL"
|
156
|
if [ -z "$KEEPLANG" ] ; then
|
157
|
KEEPLANG="en"
|
158
|
fi
|
159
|
export KEEPLANG
|
160
|
|
161
|
echo_log "Pruning other l10n files, keeping ${KEEPLANG}"
|
162
|
|
163
|
# Create the script to do uninstalls
|
164
|
echo '#!/bin/sh
|
165
|
|
166
|
for i in `pkg_info | grep "kde-l10n" | cut -d " " -f 1`
|
167
|
do
|
168
|
echo "$i" | grep "${KEEPLANG}-kde"
|
169
|
if [ "$?" != "0" ] ; then
|
170
|
pkg_delete ${i}
|
171
|
fi
|
172
|
done
|
173
|
' > ${FSMNT}/.pruneLangs.sh
|
174
|
|
175
|
chmod 755 ${FSMNT}/.pruneLangs.sh
|
176
|
chroot ${FSMNT} /.pruneLangs.sh >/dev/null 2>/dev/null
|
177
|
rm ${FSMNT}/.pruneLangs.sh
|
178
|
|
179
|
};
|
180
|
|
181
|
# Function which sets COUNTRY SETLANG and LOCALE based upon $1
|
182
|
localize_get_codes()
|
183
|
{
|
184
|
TARGETLANG="${1}"
|
185
|
# Setup the presets for the specific lang
|
186
|
case $TARGETLANG in
|
187
|
af) COUNTRY="C"
|
188
|
SETLANG="af"
|
189
|
LOCALE="af_ZA"
|
190
|
;;
|
191
|
ar) COUNTRY="C"
|
192
|
SETLANG="ar"
|
193
|
LOCALE="en_US"
|
194
|
;;
|
195
|
az) COUNTRY="C"
|
196
|
SETLANG="az"
|
197
|
LOCALE="en_US"
|
198
|
;;
|
199
|
ca) COUNTRY="es"
|
200
|
SETLANG="es:ca"
|
201
|
LOCALE="ca_ES"
|
202
|
;;
|
203
|
be) COUNTRY="be"
|
204
|
SETLANG="be"
|
205
|
LOCALE="be_BY"
|
206
|
;;
|
207
|
bn) COUNTRY="bn"
|
208
|
SETLANG="bn"
|
209
|
LOCALE="en_US"
|
210
|
;;
|
211
|
bg) COUNTRY="bg"
|
212
|
SETLANG="bg"
|
213
|
LOCALE="bg_BG"
|
214
|
;;
|
215
|
cs) COUNTRY="cz"
|
216
|
SETLANG="cs"
|
217
|
LOCALE="cs_CZ"
|
218
|
;;
|
219
|
da) COUNTRY="dk"
|
220
|
SETLANG="da"
|
221
|
LOCALE="da_DK"
|
222
|
;;
|
223
|
de) COUNTRY="de"
|
224
|
SETLANG="de"
|
225
|
LOCALE="de_DE"
|
226
|
;;
|
227
|
en_GB) COUNTRY="gb"
|
228
|
SETLANG="en_GB:cy"
|
229
|
LOCALE="en_GB"
|
230
|
;;
|
231
|
el) COUNTRY="gr"
|
232
|
SETLANG="el:gr"
|
233
|
LOCALE="el_GR"
|
234
|
;;
|
235
|
es) COUNTRY="es"
|
236
|
SETLANG="es"
|
237
|
LOCALE="es_ES"
|
238
|
;;
|
239
|
es_LA) COUNTRY="us"
|
240
|
SETLANG="es:en_US"
|
241
|
LOCALE="es_ES"
|
242
|
;;
|
243
|
et) COUNTRY="ee"
|
244
|
SETLANG="et"
|
245
|
LOCALE="et_EE"
|
246
|
;;
|
247
|
fr) COUNTRY="fr"
|
248
|
SETLANG="fr"
|
249
|
LOCALE="fr_FR"
|
250
|
;;
|
251
|
he) COUNTRY="il"
|
252
|
SETLANG="he:ar"
|
253
|
LOCALE="he_IL"
|
254
|
;;
|
255
|
hr) COUNTRY="hr"
|
256
|
SETLANG="hr"
|
257
|
LOCALE="hr_HR"
|
258
|
;;
|
259
|
hu) COUNTRY="hu"
|
260
|
SETLANG="hu"
|
261
|
LOCALE="hu_HU"
|
262
|
;;
|
263
|
it) COUNTRY="it"
|
264
|
SETLANG="it"
|
265
|
LOCALE="it_IT"
|
266
|
;;
|
267
|
ja) COUNTRY="jp"
|
268
|
SETLANG="ja"
|
269
|
LOCALE="ja_JP"
|
270
|
;;
|
271
|
ko) COUNTRY="kr"
|
272
|
SETLANG="ko"
|
273
|
LOCALE="ko_KR"
|
274
|
;;
|
275
|
nl) COUNTRY="nl"
|
276
|
SETLANG="nl"
|
277
|
LOCALE="nl_NL"
|
278
|
;;
|
279
|
nn) COUNTRY="no"
|
280
|
SETLANG="nn"
|
281
|
LOCALE="en_US"
|
282
|
;;
|
283
|
pa) COUNTRY="pa"
|
284
|
SETLANG="pa"
|
285
|
LOCALE="en_US"
|
286
|
;;
|
287
|
pl) COUNTRY="pl"
|
288
|
SETLANG="pl"
|
289
|
LOCALE="pl_PL"
|
290
|
;;
|
291
|
pt) COUNTRY="pt"
|
292
|
SETLANG="pt"
|
293
|
LOCALE="pt_PT"
|
294
|
;;
|
295
|
pt_BR) COUNTRY="br"
|
296
|
SETLANG="pt_BR"
|
297
|
LOCALE="pt_BR"
|
298
|
;;
|
299
|
ru) COUNTRY="ru"
|
300
|
SETLANG="ru"
|
301
|
LOCALE="ru_RU"
|
302
|
;;
|
303
|
sl) COUNTRY="si"
|
304
|
SETLANG="sl"
|
305
|
LOCALE="sl_SI"
|
306
|
;;
|
307
|
sk) COUNTRY="sk"
|
308
|
SETLANG="sk"
|
309
|
LOCALE="sk_SK"
|
310
|
;;
|
311
|
sv) COUNTRY="se"
|
312
|
SETLANG="sv"
|
313
|
LOCALE="sv_SE"
|
314
|
;;
|
315
|
uk) COUNTRY="ua"
|
316
|
SETLANG="uk"
|
317
|
LOCALE="uk_UA"
|
318
|
;;
|
319
|
vi) COUNTRY="vn"
|
320
|
SETLANG="vi"
|
321
|
LOCALE="en_US"
|
322
|
;;
|
323
|
zh_CN) COUNTRY="cn"
|
324
|
SETLANG="zh_CN"
|
325
|
LOCALE="zh_CN"
|
326
|
;;
|
327
|
zh_TW) COUNTRY="tw"
|
328
|
SETLANG="zh_TW"
|
329
|
LOCALE="zh_TW"
|
330
|
;;
|
331
|
*) COUNTRY="C"
|
332
|
SETLANG="${TARGETLANG}"
|
333
|
LOCALE="en_US"
|
334
|
;;
|
335
|
esac
|
336
|
|
337
|
export COUNTRY SETLANG LOCALE
|
338
|
|
339
|
};
|
340
|
|
341
|
# Function which sets the timezone on the system
|
342
|
set_timezone()
|
343
|
{
|
344
|
TZONE="$1"
|
345
|
cp ${FSMNT}/usr/share/zoneinfo/${TZONE} ${FSMNT}/etc/localtime
|
346
|
};
|
347
|
|
348
|
# Function which enables / disables NTP
|
349
|
set_ntp()
|
350
|
{
|
351
|
ENABLED="$1"
|
352
|
if [ "$ENABLED" = "yes" -o "${ENABLED}" = "YES" ]
|
353
|
then
|
354
|
cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep 'ntpd_enable="YES"' >/dev/null 2>/dev/null
|
355
|
if [ "$?" != "0" ]
|
356
|
then
|
357
|
echo 'ntpd_enable="YES"' >>${FSMNT}/etc/rc.conf
|
358
|
echo 'ntpd_sync_on_start="YES"' >>${FSMNT}/etc/rc.conf
|
359
|
fi
|
360
|
else
|
361
|
cat ${FSMNT}/etc/rc.conf 2>/dev/null | grep 'ntpd_enable="YES"' >/dev/null 2>/dev/null
|
362
|
if [ "$?" != "0" ]
|
363
|
then
|
364
|
sed -i.bak 's|ntpd_enable="YES"||g' ${FSMNT}/etc/rc.conf
|
365
|
fi
|
366
|
fi
|
367
|
};
|
368
|
|
369
|
# Starts checking for localization directives
|
370
|
run_localize()
|
371
|
{
|
372
|
KEYLAYOUT="NONE"
|
373
|
KEYMOD="NONE"
|
374
|
KEYVAR="NONE"
|
375
|
LANGUAGE="NONE"
|
376
|
|
377
|
while read line
|
378
|
do
|
379
|
# Check if we need to do any localization
|
380
|
echo $line | grep "^localizeLang=" >/dev/null 2>/dev/null
|
381
|
if [ "$?" = "0" ]
|
382
|
then
|
383
|
|
384
|
# Set our country / lang / locale variables
|
385
|
get_value_from_string "$line"
|
386
|
localize_get_codes ${VAL}
|
387
|
|
388
|
get_value_from_string "$line"
|
389
|
# If we are doing PC-BSD install, localize it as well as FreeBSD base
|
390
|
if [ "${INSTALLTYPE}" != "FreeBSD" ]
|
391
|
then
|
392
|
localize_pcbsd "$VAL"
|
393
|
LANGUAGE="$VAL"
|
394
|
fi
|
395
|
localize_freebsd "$VAL"
|
396
|
fi
|
397
|
|
398
|
# Check if we need to do any keylayouts
|
399
|
echo $line | grep "^localizeKeyLayout=" >/dev/null 2>/dev/null
|
400
|
if [ "$?" = "0" ] ; then
|
401
|
get_value_from_string "$line"
|
402
|
KEYLAYOUT="$VAL"
|
403
|
fi
|
404
|
|
405
|
# Check if we need to do any key models
|
406
|
echo $line | grep "^localizeKeyModel=" >/dev/null 2>/dev/null
|
407
|
if [ "$?" = "0" ] ; then
|
408
|
get_value_from_string "$line"
|
409
|
KEYMOD="$VAL"
|
410
|
fi
|
411
|
|
412
|
# Check if we need to do any key variant
|
413
|
echo $line | grep "^localizeKeyVariant=" >/dev/null 2>/dev/null
|
414
|
if [ "$?" = "0" ] ; then
|
415
|
get_value_from_string "$line"
|
416
|
KEYVAR="$VAL"
|
417
|
fi
|
418
|
|
419
|
|
420
|
# Check if we need to set a timezone
|
421
|
echo $line | grep "^timeZone=" >/dev/null 2>/dev/null
|
422
|
if [ "$?" = "0" ] ; then
|
423
|
get_value_from_string "$line"
|
424
|
set_timezone "$VAL"
|
425
|
fi
|
426
|
|
427
|
# Check if we need to set a timezone
|
428
|
echo $line | grep "^enableNTP=" >/dev/null 2>/dev/null
|
429
|
if [ "$?" = "0" ] ; then
|
430
|
get_value_from_string "$line"
|
431
|
set_ntp "$VAL"
|
432
|
fi
|
433
|
done <${CFGF}
|
434
|
|
435
|
if [ "${INSTALLTYPE}" != "FreeBSD" ] ; then
|
436
|
# Do our X keyboard localization
|
437
|
localize_x_keyboard "${KEYMOD}" "${KEYLAYOUT}" "${KEYVAR}" "${COUNTRY}"
|
438
|
fi
|
439
|
|
440
|
# Check if we want to prunt any other KDE lang files to save some disk space
|
441
|
get_value_from_cfg localizePrune
|
442
|
if [ "${VAL}" = "yes" -o "${VAL}" = "YES" ] ; then
|
443
|
localize_prune_langs
|
444
|
fi
|
445
|
|
446
|
# Update the login.conf db, even if we didn't localize, its a good idea to make sure its up2date
|
447
|
run_chroot_cmd "/usr/bin/cap_mkdb /etc/login.conf" >/dev/null 2>/dev/null
|
448
|
|
449
|
};
|