{"ref":"artifact:concircle-i18n-ai-translator","page":"/artifacts/concircle-i18n-ai-translator","json":"/artifacts/concircle-i18n-ai-translator.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"concircle-i18n-ai-translator","name":"@concircle/i18n-ai-translator","artifact_type":"cli","ecosystem":"ui5","domain":"developer-experience","origin_ring":"independent","description":{"one_line":"A CLI that translates a UI5 app's i18n.properties with OpenAI and writes the language files back, masking placeholders, applying a glossary and caching what has been translated.","short":"CLI translating UI5 i18n.properties files with OpenAI","what_it_solves":"A UI5 app ships its texts as i18n.properties, and every further language is another file somebody fills in by hand or sends out to be translated. This reads the base bundle and writes i18n_de.properties and its siblings back into the project, in `missing` mode for the keys with no text yet or `overwrite` for all of them. It masks the placeholders before sending the text to the model and validates that they are still present afterwards, and a glossary of shared and per-language terms sets a term's target word, `Order` to `Auftrag` in its own example. A local cache keyed on the provider, the model, the two languages and the source value holds what has been translated, so it is the text rather than the property key that decides whether a request repeats. It installs as a devDependency and runs as `i18n-ai-translator` from an npm script, or as a `Translator` class and a `translateProject` helper from Node; OpenAI is the only provider the configuration takes, and the key comes from `OPENAI_API_KEY` or the config file."},"links":{"npm":"https://www.npmjs.com/package/@concircle/i18n-ai-translator","repo":"https://github.com/concircle/i18n-ai-translator"},"identity":{"author":"Herbert Kaintz","license":"MIT"},"source_available":true,"compat":{"runtimes":["node"]},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://raw.githubusercontent.com/concircle/i18n-ai-translator/main/README.md","title":"concircle/i18n-ai-translator — README, Installation","checked":"2026-10-19","quote":"npm install --save-dev @concircle/i18n-ai-translator"}]}},"provides":[{"capability":"capability:localization","what_it_does":"Produces the further-language bundles a UI5 app would otherwise be translated into by hand, writing i18n_<locale>.properties from the base bundle with its placeholders and glossary terms carried across.","sources":[{"url":"https://github.com/concircle/i18n-ai-translator","title":"concircle/i18n-ai-translator — README","checked":"2026-09-25","quote":"Translates UI5 `i18n.properties` files with OpenAI, preserves placeholders, supports glossary terms, and writes language-specific `.properties` files."},{"url":"https://github.com/concircle/i18n-ai-translator","title":"concircle/i18n-ai-translator — README, Features","checked":"2026-09-25","quote":"Writes UI5-style language files such as `i18n_de.properties`"},{"url":"https://registry.npmjs.org/@concircle/i18n-ai-translator","title":"@concircle/i18n-ai-translator — npm registry record","checked":"2026-10-19","quote":"Translates UI5 i18n.properties files with OpenAI, preserving placeholders and glossary terms."}]}],"maintainers":["actor:concircle","actor:hkaintz"],"drafted_with_ai":true,"provenance":{"discovered_via":[{"source":"source:bestofui5","channel":"bestofui5-data, sources.json"}],"first_seen":"2026-09-25"},"contributors":["actor:hkaintz"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"fair","evidence":"7 months since release"},{"label":"Continuity","tier":"fair","evidence":"1 contributor, 1 publisher, org-owned"},{"label":"Repository","tier":"fair","evidence":"pushed 2026-03, not archived"}],"compatibility":[{"label":"Declared for","tier":"unknown","evidence":"no UI5 release lines in the atlas"},{"label":"Survived majors","tier":"unknown","evidence":"no UI5 release lines in the atlas"},{"label":"Maintainer's CI","tier":"good","evidence":"CI green, 2026-03-28"}],"practice":[{"label":"Tests","tier":"good","evidence":"9 test files, npm test"},{"label":"Docs","tier":"good","evidence":"docs/ with 1 page, README 5 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":12,"unit":"installs/week"},{"value":2,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","latest_version":"0.1.4","majors":{"0.1":{"version":"0.1.0","date":"2026-03-27"}},"license":"MIT","first_release":"2026-03-27","last_release":"2026-03-28","releases":5,"cadence_days":0,"maintainers":1,"repository":"git+https://github.com/concircle/i18n-ai-translator.git","repository_directory":null,"peer_cds":null,"dependencies":2,"node_engine":">=20.0.0","test_script":true,"types":true,"downloads_weekly":12,"downloads_monthly":38,"stars":2,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-03-28","license_spdx":"MIT","org_owned":true,"default_branch":"main","created_at":"2026-03-27T23:34:24Z","open_prs":0,"tree_truncated":false,"test_files":9,"workflows":1,"other_ci":false,"readme_bytes":5557,"docs_files":1,"changelog":true,"license_file":true,"dts_files":0,"first_commit":"2026-03-24","last_commit":"2026-03-28","commits":43,"contributors":1,"ci_status":"success","ci_run_at":"2026-03-28","ci_workflow":"CI","ci_event":"push","readme_path":"README.md","readme_sha":"829562f38bad0fc96f911ea0533ff8a3b6d58831","months_since_release":7,"dormant":false,"repo_read":"2026-10-24"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"repo","path":"CHANGELOG.md","ref":"main","url":"https://github.com/concircle/i18n-ai-translator/blob/main/CHANGELOG.md"},"format":"keep-a-changelog","releases":[{"version":"0.1.0-beta.1","date":"2026-03-24","date_source":"heading","heading":"[0.1.0-beta.1] - 2026-03-24","url":"https://github.com/concircle/i18n-ai-translator/blob/main/CHANGELOG.md#010-beta1---2026-03-24","sections":[{"kind":"feature","heading":"Added","items":10},{"kind":"docs","heading":"Documentation","items":4}],"hash":"bbc99c11e226573f"}],"versions":[{"version":"0.1.4","date":"2026-03-28"},{"version":"0.1.3","date":"2026-03-28"},{"version":"0.1.2","date":"2026-03-27"},{"version":"0.1.1","date":"2026-03-27"},{"version":"0.1.0","date":"2026-03-27"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:concircle","name":"Concircle","json":"/actors/concircle.json"},{"ref":"actor:hkaintz","name":"Herbert Kaintz","json":"/actors/hkaintz.json"}],"contributors":[{"ref":"actor:hkaintz","name":"Herbert Kaintz","json":"/actors/hkaintz.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}