I used to use ChatGPT to translate the JSON translation file changes before coding Quicklang. However, I realized that ChatGPT only allows you to input short content for translation into another language (even if you provide a .json file), and each time I had to request translations for one language at a time. So, I decided to build an app that only sends the changes I’ve made to the OpenAI API and easily translates them into all the target languages for my side projects.
Technical details: I used Next.js to build the front end and backend, and I use a custom VPS (EC2 instance) on AWS to handle the translation process. This is because the translation can take several minutes, and Vercel Functions time out after 10 seconds by default (up to 60 seconds on the Hobby plan). Finally, I save the translation files in an S3 bucket.
What’s next? I want to add cool features like change history, the capability to add context to the OpenAI API to make translations as accurate as possible, and maybe allow developers to interact with the API in order to use the tool.
Let me know your thoughts and feedback. It’s been a blast working on this so far, and I think it’s just neat :)
>This credits will never expire.
>So if you sync new o modified content
There are obvious mistakes in the English version of your website, which is totally bizarre to me, since these errors are absent in the German version. My guess is that the AI actually fixed these errors when translating.
I have to say that the German translation is really bad though.
"Habe nach einem Online-JSON-Editor gesucht, aber nur Enterprise-Tools gefunden, die nicht das bieten, was ich brauchte, also...
Ich habe mein eigenes JSON-Übersetzungstool erstellt. "
Dropping the "Ich" at the beginning of the first sentence makes it sound like total slang. And the transition between the paragraphs does not work in German (due to the verb being at a different position compared to English). It sounds extremely clunky.
"Prost!"
This just is not an appropriate translation.
"Hier ist was sie über Quicklang."
This isn't a complete sentence. It misses an essential component.
"Holen Quicklang"
Nonsensical translation.
"lokalisieren Sie Ihre SaaS-, App-, KI-Produkt- oder Website, um Ihnen das weltweite Versenden zu erleichtern."
I don't get what that means. The AI translated shipping as sending. It should have been "um Ihnen den weltweiten Vertrieb zu erleichtern", or something like that.
I usually hate nitpicking on stuff like this and I wouldn't have mentioned it if the product was anything else. But surely you can present your product in a better way.
This is in spite of OP apparently being Spanish.
It also doesn't sound like this can handle dynamic phrases like "buy {{count}} items"?
Pro tip: If you are using an LLM to do translations for you, give it CONTEXT so that the translations are not garbage. Don’t just say “translate x into german”. Explain in sentence or two what it’s translating and who the audience is. Many words are translated differently depending on the context of the conversation.
I built it to their spec, for their CMS. They didn't use it, because the scheme they wanted turned out to be too much bother, and they couldn't find translation agencies who would bother with it.
The reality is that if you want to make it easy to keep translations up-to-date, you actually have to support all the (confusing, frustrating) translation infrastructure built around .PO files. Because then you have the support of translation agencies, tooling, even Crowdin etc.
Trying to short-circuit this with clever minimal bespoke JSON and ChatGPT is probably a mistake: this is a job where you will ultimately want actual people with actual multilingual ability working for you, and if you don't use the normal tooling you'll find it difficult to attract contributors even with open source.
not only .po files :D XML, i18next json, localizable strings (iOS), ... the list goes on.
Ps. I'm working on a similar opensource tool to speed up the i18n process ( https://codeberg.org/garage44/expressio)
I use DeepL for real-time translation in my side project. The reason I’m not utilizing the DeepL API on my backend and instead opting for the OpenAI API is twofold:
1. OpenAI is more cost-effective compared to DeepL API. 2. I was already using ChatGPT to translate my JSON files, so there’s no change in translation quality for me.
The primary issue I wanted to resolve is easily keeping all my destination language JSON files in sync.
Cheers!
cat english.json | sed 's/"\([^"]*\)"/«\1»/g' > french.jsonGood approach, but I want to translate the strings on the JSON file from some source language (spanish for me) into any destination language.
So the JSON may be:
{ "hello": "Hola" }
If the destination language is "English" the result must be:
{ "hello": "Hello" }
https://github.com/KevinColemanInc/i18n-translate-go
Works well for i18njs. The issues I ran into are: chat-gpt didn't translate all the keys in the batch (especially for obscure languages like Laos) and sometimes the chatgpt output invalid unicode (see error in the readme).
I was a bit lazy, so I just inform the user to re-run it manually instead of automatically handling it.
<strong>Hello World</strong>
And on-the-fly translation? Say I have a backend that returns english language but I need it to translate it to another language on the fly? It could check whether the translation is available and otherwise generate it and store it. The original text key could be a hash of the text and you probably need in-memory key lookup for those hashes.
Thank you for your feedback! Quicklang is designed as a tool to synchronize and manage your JSON translation files centrally. For me, it’s good to have quick access for localizing my side projects efficiently and maintaining a changelog, among other features.
While there are several enterprise options available such as DeepL or Lokalise, they don’t quite fit my specific use case. ;)
monetizing your solution will likely be a dead end.
the value prop of your solution doesn't match the app you built, and what buyers pay for. for example, machine translating translation files is easier for you to build and developers to use with a cli [0] instead of a web app. there is no value in rendering json in the web app. vscode does a better job at rendering json's.
you could monetize via a web app if you allow non-devs to edit translations. but that's a beast called CAT editor [1], where you need to support all sorts of different file formats. aka, the value of a CAT editor is the file support and ecosystem around it, not the editor itself.
[0] https://inlang.com/m/2qj2w8pu/app-inlang-cli#machine-transla...
[1] https://inlang.com/m/tdozzpar/app-inlang-finkLocalizationEdi...
Strunggle with i18n -> Struggle with i18n ^
I got tired of manually copy/pasting translations from ChatGPT every time I updated my main language JSON file. So I build my own alternative.
Joan
I don't mean to be critical, sounds like something I could actually use occasionally. I sometimes feel like I'm the only one putting up this common sense fight: if designers can spend hours crafting something carefully worded, tailored in English for something, why would it make sense to just take that and auto-translate it into something that if it's wrong gets discovered in the market as some very awkward in-app experience where the words don't make sense so much someone complains? My only gripe is people thinking AI is the total substitute for localization, it's not a silver bullet, but sure is better than nothing.
I like the idea.
At Replexica we've basically built a better + much faster (+ sometimes cheaper) alternative to Lokalise, Phrase, and Crowdin (we help dev teams do AI translations of user interfaces - web, mobile, Apple Vision Pro, etc.). So having seen some things, I must say AI-powered localization is indeed the future, but it's very, very hard to get it right.
For example, it took us a while to perfect the quality. Working with the "industry standard" scores (BLEU, etc.) isn't easy, and the state of the machine translation industry feels very last century, so you have to oftentimes invent things by studying the latest research.
It's a constant quest to ensure the user gets the best, perfect result, and not to mention, different LLMs perform differently with different language pairs, which adds an extra challenge to maintaining accuracy while iterating. For example, we had to build a regression testing setup internally, to make sure the quality only improves as we ship.
Nevertheless, good luck. I will be keeping an eye on your progress.
BTW, loving your domain name.
EDIT: typos