mediawiki-extensions-Visual.../bin/buildi18n-json.sh
Roan Kattouw 789d187ce5 Add JSON->PHP conversion script for i18n
Apparently the .i18n.php shim is causing problems in both production
and beta labs, so for now we'll just generate the .i18n.php file
from the JSON files.

The first half of the conversion script is identical to the shim.

Change-Id: Id606584197d7efcff6fff29ea22cd35dd744b55e
2013-12-12 13:48:05 -08:00

89 lines
1.9 KiB
Bash
Executable file

#! /bin/bash
# Requires VisualEditor.i18n.php to still contain all messages
# To reset it to that state, you can run:
# $ git reset HEAD^ VisualEditor.i18n.php
# $ git checkout VisualEditor.i18n.php
# Then to reset it back the way it was:
# $ git reset VisualEditor.i18n.php
# $ git checkout VisualEditor.i18n.php
if [ -e i18n ]
then
cat <<END >&2
ERROR: i18n directory already exists
This script uses the i18n directory as a temporary directory
Please ensure you are in the top-level directory (VisualEditor), delete the i18n directory,
and try again
END
exit 1
fi
mkdir i18n
echo Building author lists... >&2
for lang in $(
grep "^\\\$messages\[" VisualEditor.i18n.php \
| sed "s/^\\\$messages\['//" \
| sed "s/'.*\$//"
)
do
grep -B 100 "\\$messages['$lang']" VisualEditor.i18n.php \
| grep '@author' \
| sed 's/^.*@author //g' \
> i18n/$lang.authors
done
echo Building JSON blobs... >&2
cat <<END | php -a > /dev/null 2>&1
require_once("VisualEditor.i18n.php");
foreach ( \$messages as \$lang => \$msgs ) {
\$newArr = array(
'@metadata' => array(
'authors' => array_map( 'trim', file( "i18n/\$lang.authors" ) )
)
);
\$newArr += \$msgs;
file_put_contents(
"i18n/\$lang.json",
json_encode( \$newArr, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE )
);
}
END
echo Splitting JSON blobs... >&2
for group in oojs-ui ve ve-mw ve-wmf
do
mkdir -p modules/$group/i18n
for f in i18n/*.json
do
(
(
head -n $(grep -n '},' $f | head -n 1 | cut -d : -f 1) $f
for msg in $(cat bin/msgs-$group)
do
grep "\"$msg\"" $f
done
) | sed '${s/,$//}' \
| sed 's/^ / /g' \
| sed 's/^ / /g' \
| sed 's/^ / /g'
echo '}'
) > modules/$group/$f
if grep '^ "[^@]' modules/$group/$f > /dev/null
then
echo modules/$group/$f >&2
else
rm modules/$group/$f
echo Skipping modules/$group/$f
fi
done
done
rm -rf i18n
echo All done >&2