UNPKG

i18n-ai-translate

Version:

AI-powered localization CLI, Node library, and GitHub Action. Translate i18next JSON, Gettext PO, Java .properties, and iOS .strings with ChatGPT, Claude, Gemini, or local Ollama models.

118 lines (109 loc) 3.79 kB
name: i18n-ai-translate description: Automatically translate your i18n files (JSON, PO, .properties, .strings) on every PR with ChatGPT, Claude, Gemini, or Ollama author: Taaha Mahdi inputs: json-file-path: description: 'Path to the source i18n JSON file' required: true api-key: description: 'The API key' required: false host: description: "The ollama host and port number" required: false author-email: description: 'The email of the person to attribute the i18n change to' required: false default: 'tmahdi+i18n-ai-translate@proton.me' author-name: description: 'The name of the person to attribute the i18n change to' required: false default: 'Taaha Mahdi' language: description: 'Language to translate from' required: false default: 'en' engine: description: 'Engine to use for translation' required: false default: 'chatgpt' model: description: 'Model to use for the translation (e.g., gpt-5.2, gpt-5-mini, gemini-2.5-flash, claude-sonnet-4-6)' required: false default: 'gpt-5.2' templated-string-prefix: description: 'Prefix for templated strings' required: false default: "{{" templated-string-suffix: description: 'Suffix for templated strings' required: false default: "}}" batch-size: description: 'How many keys to process at a time' required: false default: 32 runs: using: 'composite' steps: - name: Check out Repo uses: actions/checkout@v3 with: ref: ${{ github.head_ref }} fetch-depth: 0 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 18 - name: Fetch original translation shell: bash run: | mv "${{ inputs.json-file-path }}" "${{ inputs.json-file-path }}-latest" git checkout origin/${{ github.base_ref }} -- "${{ inputs.json-file-path }}" - name: Translate the diff shell: bash run: | if [ -n "${{ inputs.api-key }}" ]; then npx --yes i18n-ai-translate@latest diff \ -b "${{ inputs.json-file-path }}" \ -a "${{ inputs.json-file-path }}-latest" \ -l "${{ inputs.language }}" \ --verbose \ --engine "${{ inputs.engine }}" \ --model "${{ inputs.model }}" \ -p "${{ inputs.templated-string-prefix }}" \ -s "${{ inputs.templated-string-suffix }}" \ -n "${{ inputs.batch-size }}" \ -k "${{ inputs.api-key }}" elif [ -n "${{ inputs.host }}" ]; then npx --yes i18n-ai-translate@latest diff \ -b "${{ inputs.json-file-path }}" \ -a "${{ inputs.json-file-path }}-latest" \ -l "${{ inputs.language }}" \ --verbose \ --engine "${{ inputs.engine }}" \ --model "${{ inputs.model }}" \ -p "${{ inputs.templated-string-prefix }}" \ -s "${{ inputs.templated-string-suffix }}" \ -n "${{ inputs.batch-size }}" \ -h "${{ inputs.host }}" else echo "No API key or host specified; skipping automatic translation." fi if [ $? -ne 0 ]; then echo "Translation step failed" >&2 exit 1 fi - name: Configure Git shell: bash run: | git config --global user.email "${{ inputs.author-email }}" git config --global user.name "${{ inputs.author-name }}" - name: Commit the difference shell: bash run: | rm -r "${{ inputs.json-file-path }}" mv "${{ inputs.json-file-path }}-latest" "${{ inputs.json-file-path }}" git add --all git commit -m "Update translations" || echo "No changes to commit" git push