mirror of
https://github.com/openwrt/luci
synced 2025-01-07 03:27:12 +08:00
build: update build/i18n-* tools
modify i18n-add-language.sh so it can: - be run from any path - bootstrap any (or all) po folder(s) with existing language(s) - (partially) update luci.mk with new languages deprecate build/i18n-init.sh Signed-off-by: Paul Donald <newtwen@gmail.com>
This commit is contained in:
parent
c487c4f184
commit
b98d8c526e
@ -1,37 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
LANG=$1
|
||||
LANGS=$@
|
||||
if [ "$#" -eq 0 ]; then
|
||||
echo $0 "adds i18n catalogue(s) in po/ folders (luci-app-*, luci-mod-*, etc) for each LUCI_LANG.* in luci.mk"
|
||||
echo "Hint: run in the root of the luci repo or in your luci-app-* folder."
|
||||
|
||||
case "$LANG" in
|
||||
[a-z][a-z]|[a-z][a-z][_-][A-Za-z][A-Za-z]*) : ;;
|
||||
*)
|
||||
echo "Usage: $0 <ISO_CODE>\n" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
# get existing language codes from luci.mk
|
||||
language_codes=$(grep -o 'LUCI_LANG\.[a-zA-Z]*' $(dirname "$0")/../luci.mk | cut -d '.' -f 2 | sort -u)
|
||||
LANGS=$language_codes
|
||||
|
||||
ADDED=0
|
||||
else
|
||||
for LANG in $LANGS; do
|
||||
case "$LANG" in
|
||||
[a-z][a-z]|[a-z][a-z][_-][A-Za-z][A-Za-z]*) : ;;
|
||||
*)
|
||||
echo $0 "adds i18n catalogues in each folder (luci-app-*, luci-mod-*, etc)."
|
||||
echo "Usage: $0 <ISO_CODE> [<ISO_CODE> <ISO_CODE> ...]" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
for podir in ./*/*/po; do
|
||||
ADDED=false
|
||||
|
||||
for podir in $(find . -type d -name "po"); do
|
||||
[ -d "$podir/templates" ] || continue
|
||||
|
||||
mkdir "$podir/$LANG"
|
||||
for catalog in $(cd "$podir/templates"; echo *.pot); do
|
||||
if [ -f "$podir/templates/$catalog" -a ! -f "$podir/$LANG/${catalog%.pot}.po" ]; then
|
||||
msginit --no-translator -l "$LANG" -i "$podir/templates/$catalog" -o "$podir/$LANG/${catalog%.pot}.po"
|
||||
git add "$podir/$LANG/${catalog%.pot}.po"
|
||||
ADDED=$((ADDED + 1))
|
||||
fi
|
||||
for LANG in $LANGS; do
|
||||
# if "$podir/$LANG" doesn't exist, mkdir
|
||||
[ -d "$podir/$LANG" ] || mkdir "$podir/$LANG"
|
||||
for catalog in $(cd "$podir/templates"; echo *.pot); do
|
||||
if [ -f "$podir/templates/$catalog" -a ! -f "$podir/$LANG/${catalog%.pot}.po" ]; then
|
||||
msginit --no-translator -l "$LANG" -i "$podir/templates/$catalog" -o "$podir/$LANG/${catalog%.pot}.po"
|
||||
git add "$podir/$LANG/${catalog%.pot}.po"
|
||||
ADDED=true
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
if [ $ADDED -gt 0 ]; then
|
||||
echo ""
|
||||
echo "Added $ADDED new translation catalogs for language '$LANG'."
|
||||
echo "Please also edit 'luci.mk' and add"
|
||||
echo ""
|
||||
echo " LUCI_LANG.$LANG=Native Language Name"
|
||||
echo ""
|
||||
echo "to properly package the translation files."
|
||||
echo ""
|
||||
start_marker="^#LUCI_LANG_START$"
|
||||
end_marker="^#LUCI_LANG_END$"
|
||||
|
||||
if [ $ADDED ]; then
|
||||
for LANG in $LANGS; do
|
||||
if [[ $language_codes != *"$LANG"* ]]; then
|
||||
|
||||
# Read the contents of the luci.mk file
|
||||
file_content=$(cat "$(dirname "$0")/../luci.mk")
|
||||
|
||||
# Extract the section between start and end markers
|
||||
section=$(awk -v start="$start_marker" -v end="$end_marker" '
|
||||
$0 ~ start {RS="\n"; printf ""; flag=1; next}
|
||||
$0 ~ end {flag=0} flag' <<< "$file_content")
|
||||
|
||||
# Add the new language code to the section
|
||||
section+="\nLUCI_LANG.$LANG=New language"
|
||||
# Sort the section and remove duplicates
|
||||
updated_content=$(echo -e "$section" | sort -u | sed -E "/$start_marker/,/$end_marker/{ /$start_marker/{p; r /dev/stdin
|
||||
}; /$end_marker/p; d
|
||||
}" $(dirname "$0")/../luci.mk)
|
||||
|
||||
# Write the updated content back to the .mk file
|
||||
echo "$updated_content" > $(dirname "$0")/../luci.mk
|
||||
|
||||
echo "Be sure to update the new language name in $(dirname "$0")/../luci.mk"
|
||||
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
@ -3,6 +3,10 @@
|
||||
PATTERN=$1
|
||||
SCM=
|
||||
|
||||
echo $0 "initialises po/ i18n catalogues in empty language sub-folders."
|
||||
echo $0 "is deprecated and may be removed in the future."
|
||||
echo "Hint: run i18n-add-language.sh instead."
|
||||
|
||||
[ -d .svn ] && SCM="svn"
|
||||
git=$( command -v git 2>/dev/null )
|
||||
[ "$git" ] && "$git" status >/dev/null && SCM="git"
|
||||
|
@ -294,7 +294,7 @@ waitpid $msguniq_pid, 0;
|
||||
while (@pot > 0) {
|
||||
my $line = shift @pot;
|
||||
|
||||
# Reorder the location comments in a detemrinistic way to
|
||||
# Reorder the location comments in a deterministic way to
|
||||
# reduce SCM noise when frequently updating templates.
|
||||
if ($line =~ m!^#: !) {
|
||||
my @locs = ($line);
|
||||
|
@ -52,7 +52,7 @@ my @dirs;
|
||||
|
||||
if( ! $source )
|
||||
{
|
||||
@dirs = glob("./*/*/po/");
|
||||
@dirs = glob("./*/*/po");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -8,9 +8,9 @@
|
||||
echo -n "Updating modules/luci-base/po/templates/base.pot ... "
|
||||
|
||||
./build/i18n-scan.pl \
|
||||
modules/luci-base/ modules/luci-compat/ modules/luci-lua-runtime/ \
|
||||
modules/luci-mod-network modules/luci-mod-status modules/luci-mod-system/ \
|
||||
protocols/ themes/ \
|
||||
modules/luci-base modules/luci-compat modules/luci-lua-runtime \
|
||||
modules/luci-mod-network modules/luci-mod-status modules/luci-mod-system \
|
||||
protocols themes \
|
||||
> modules/luci-base/po/templates/base.pot
|
||||
|
||||
echo "done"
|
||||
|
14
docs/i18n.md
14
docs/i18n.md
@ -59,6 +59,20 @@ The actual translation files can be found at `po/[lang]/[package].po`.
|
||||
In order to use the commands below you need to have the `gettext` utilities (`msgcat`, `msgfmt`, `msgmerge`) installed on your system.
|
||||
On Debian/Ubuntu you can install with `sudo apt install gettext`.
|
||||
|
||||
### Initialize po files
|
||||
|
||||
When you add or update an app, simply run from your app folder:
|
||||
|
||||
../../build/i18n-add-language.sh
|
||||
|
||||
This creates the skeleton po files for all existing languages open for translation for your app.
|
||||
|
||||
Or from the luci repo root:
|
||||
|
||||
./build/i18n-add-language.sh
|
||||
|
||||
This creates the skeleton po files for all existing languages open for translation for all sub-folders.
|
||||
|
||||
### Rebuild po files
|
||||
If you want to rebuild the translations after you made changes to a package this is an easy way:
|
||||
|
||||
|
11
luci.mk
11
luci.mk
@ -18,7 +18,7 @@ LUCI_MINIFY_LUA?=1
|
||||
LUCI_MINIFY_CSS?=1
|
||||
LUCI_MINIFY_JS?=1
|
||||
|
||||
# Language code titles
|
||||
#LUCI_LANG_START
|
||||
LUCI_LANG.ar=العربية (Arabic)
|
||||
LUCI_LANG.bg=български (Bulgarian)
|
||||
LUCI_LANG.bn_BD=বাংলা (Bengali)
|
||||
@ -42,8 +42,8 @@ LUCI_LANG.ms=Bahasa Melayu (Malay)
|
||||
LUCI_LANG.nb_NO=Norsk (Norwegian)
|
||||
LUCI_LANG.nl=Nederlands (Dutch)
|
||||
LUCI_LANG.pl=Polski (Polish)
|
||||
LUCI_LANG.pt_BR=Português do Brasil (Brazilian Portuguese)
|
||||
LUCI_LANG.pt=Português (Portuguese)
|
||||
LUCI_LANG.pt_BR=Português do Brasil (Brazilian Portuguese)
|
||||
LUCI_LANG.ro=Română (Romanian)
|
||||
LUCI_LANG.ru=Русский (Russian)
|
||||
LUCI_LANG.sk=Slovenčina (Slovak)
|
||||
@ -53,6 +53,7 @@ LUCI_LANG.uk=Українська (Ukrainian)
|
||||
LUCI_LANG.vi=Tiếng Việt (Vietnamese)
|
||||
LUCI_LANG.zh_Hans=简体中文 (Chinese Simplified)
|
||||
LUCI_LANG.zh_Hant=繁體中文 (Chinese Traditional)
|
||||
#LUCI_LANG_END
|
||||
|
||||
# Submenu titles
|
||||
LUCI_MENU.col=1. Collections
|
||||
@ -130,10 +131,10 @@ include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
# LUCI_SUBMENU: the submenu-item below the LuCI top-level menu inside OpenWrt menuconfig
|
||||
# usually one of the LUCI_MENU.* definitions
|
||||
# LUCI_SUBMENU_DEFAULT: the regular SUBMENU defined by LUCI_TYPE or derrived from the packagename
|
||||
# LUCI_SUBMENU_FORCED: manually forced value SUBMENU to set to by explicit definiton
|
||||
# LUCI_SUBMENU_DEFAULT: the regular SUBMENU defined by LUCI_TYPE or derived from the packagename
|
||||
# LUCI_SUBMENU_FORCED: manually forced value SUBMENU to set to by explicit definition
|
||||
# can be any string, "none" disables the creation of a submenu
|
||||
# most usefull in combination with LUCI_CATEGORY, to make the package appear
|
||||
# most useful in combination with LUCI_CATEGORY, to make the package appear
|
||||
# anywhere in the menu structure
|
||||
LUCI_SUBMENU_DEFAULT=$(if $(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.app))
|
||||
LUCI_SUBMENU=$(if $(LUCI_SUBMENU_FORCED),$(LUCI_SUBMENU_FORCED),$(LUCI_SUBMENU_DEFAULT))
|
||||
|
Loading…
Reference in New Issue
Block a user