a897edc84f
Introduces French (fr) as a supported language across the workflow, installation script, translation utility, and documentation. Updates language selection menus, README files, and adds a new French README. Also bumps shell_version to 2.6.1 and improves language selection logic. Update translate.py Update translate.py Update README instructions and links in EN/FR Added a link to the background story of 'idleleo' in both English and French README files. Updated the Simplified Chinese link in the French README and replaced the Telegram group link with a clickable version. Update README.md Update Backstory links in README translations Changed the 'idleleo' background story links in the main and translated README files to point to specific anchor sections for improved navigation.
147 lines
4.5 KiB
YAML
147 lines
4.5 KiB
YAML
name: Update Translations
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'install.sh'
|
|
- 'fail2ban_manager.sh'
|
|
- 'file_manager.sh'
|
|
- 'translate.py'
|
|
branches:
|
|
- main
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
update-translations:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Check running workflows
|
|
uses: styfle/cancel-workflow-action@0.12.1
|
|
with:
|
|
access_token: ${{ github.token }}
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: true
|
|
|
|
- name: Restore translation cache
|
|
id: cache-translations
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: po/cache_*.json
|
|
key: ${{ runner.os }}-translations-${{ hashFiles('po/*.po') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-translations-
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y gettext python3 python3-pip i18nspector
|
|
pip3 install googletrans-py langdetect openai
|
|
|
|
- name: Cache Python dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: ${{ runner.os }}-pip-googletrans-py-langdetect-openai
|
|
restore-keys: |
|
|
${{ runner.os }}-pip-
|
|
|
|
- name: Setup directories
|
|
run: |
|
|
mkdir -p po
|
|
mkdir -p languages/{en,fa,ru,zh_CN,ko,fr}/LC_MESSAGES
|
|
|
|
- name: Extract strings from specified scripts
|
|
run: |
|
|
echo "install.sh" > po/POTFILES.in
|
|
echo "fail2ban_manager.sh" >> po/POTFILES.in
|
|
echo "file_manager.sh" >> po/POTFILES.in
|
|
|
|
xgettext \
|
|
--files-from=po/POTFILES.in \
|
|
--from-code=UTF-8 \
|
|
--language=Shell \
|
|
--keyword=gettext \
|
|
--package-name=xray_install \
|
|
--package-version=1.0 \
|
|
--msgid-bugs-address=https://github.com/hello-yunshu/Xray_bash_onekey/issues \
|
|
--copyright-holder="yunshu" \
|
|
--output=po/xray_install.pot
|
|
|
|
- name: Update/Create PO files
|
|
run: |
|
|
rm -f po/*.po
|
|
for lang in zh_CN en fa ru ko fr; do
|
|
msginit --no-translator --locale=$lang --input=po/xray_install.pot --output=po/$lang.po
|
|
done
|
|
|
|
- name: Auto translate
|
|
run: python3 translate.py
|
|
env:
|
|
AI_API_KEY: ${{ secrets.AI_API_KEY }}
|
|
|
|
- name: Compile MO files if necessary
|
|
run: |
|
|
needs_compile=false
|
|
for lang in en fa ru ko fr; do
|
|
if [ ! -f "po/${lang}.po.no-update" ]; then
|
|
needs_compile=true
|
|
if ! msgfmt --check -v --statistics -o languages/${lang}/LC_MESSAGES/xray_install.mo po/${lang}.po; then
|
|
echo "Error in ${lang}.po file:"
|
|
cat po/${lang}.po
|
|
fi
|
|
fi
|
|
done
|
|
if [ "$needs_compile" = false ]; then
|
|
echo "No translations were updated. Skipping MO file compilation."
|
|
fi
|
|
|
|
- name: Run i18nspector checks on PO files
|
|
run: |
|
|
i18nspector check po/
|
|
|
|
- name: Run i18nspector checks on MO files if compiled
|
|
run: |
|
|
for lang in en fa ru ko fr; do
|
|
if [ ! -f "po/${lang}.po.no-update" ] && [ -f "languages/${lang}/LC_MESSAGES/xray_install.mo" ]; then
|
|
i18nspector check-binary languages/${lang}/LC_MESSAGES/xray_install.mo
|
|
fi
|
|
done
|
|
|
|
- name: Save translation cache
|
|
if: always()
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: po/cache_*.json
|
|
key: ${{ runner.os }}-translations-${{ hashFiles('po/*.po') }}
|
|
|
|
- name: Pull changes
|
|
run: |
|
|
git pull origin main
|
|
|
|
- name: Commit changes if necessary
|
|
run: |
|
|
needs_commit=false
|
|
for lang in en fa ru ko fr; do
|
|
if [ ! -f "po/${lang}.po.no-update" ]; then
|
|
needs_commit=true
|
|
break
|
|
else
|
|
rm po/${lang}.po.no-update
|
|
fi
|
|
done
|
|
if [ "$needs_commit" = true ]; then
|
|
git config --local user.email "action@github.com"
|
|
git config --local user.name "GitHub Action"
|
|
git add po/ languages/
|
|
git commit -m "Update translations for all languages [$(date +%Y-%m-%d)]" || echo "No changes to commit"
|
|
git push
|
|
else
|
|
echo "No translations were updated. Skipping commit and push."
|
|
fi |