Scooped!
I finished the first pass translations on May 26th, posted on X about it on the 27th. I was under the impression that this was the first complete translation of these texts in history. But I was wrong!
I started this translation project at the end of December, 2025. Later, in February 2026, Bryan Cheong posted AI translations to his larger translation project at Deltoi. Then in March, ctext itself posted crowdsourced AI translations of the texts.
I didn't see either of these until I finished my own translations in May. So I am at least the third to complete a full translation of these texts. Had I released my translations in January, I may have been first. This speaks to where we are with AI technology right now. Just in the last few months, we have reached the point where a motivated individual can translate 40 million characters of Chinese text with their own funds. So naturally, multiple people had the same idea: Let's translate the 24 histories of China.
I still want to work on my translations. I will aim to make them the most high-quality and polished version of these texts. Unlike Deltoi and ctext, which are both broader in scope, this is a highly focused project on just the 24 histories (plus the Draft History of Qing and the Zizhi Tongjian). I plan on building secondary materials on top of the texts, as well as being the first to release an e-book series with all 26 books.
Let's see how far I can take this.
First Pass Complete
If you head over to the Progress page, you'll see that all 4099 chapters have been translated. This is well ahead of my expected schedule!
I was expecting to gradually trickle out new translations between now and October. In April, I had a Cursor cloud automation rigged to translate 1-2 chapters every hour for a throughput of 24-48 chapters per day. I did this to keep below the AI usage cap of my Cursor Ultra subscription, while also using it for my day to day coding.
But then, Cursor released their new Composer 2.5 model, which is really good. And they announced that, over the Memorial Day weekend, they would be offering it at 90% off for calls through the Cursor SDK. I realized I would never have so much access to AI compute at such a low cost again, so I set up a massive batch job to work through all remaining chapters in one massively parallelized run. The last few chapters spilled out past the weekend promo period and I used up my entire month of token budget in two days, but every chapter got a first-pass translation.
Now, you can read all 24 dynastic histories, plus the Draft History of Qing and the Zizhi Tongjian, in glorious translated English! The next step will be sending agents to do polish and consistency improvements on all the translated text. But if you're OK with a little less polish, you can read them now.
Future roadmap:
- Polish, consistency, and semantic correctness editing on all chapters.
- A glossary of named individuals and places, so we can easily find all references to a specific person or place through all the histories.
- E-books of the polished translations, for sale on Amazon and other platforms.
- Promotion, so that more people can hear that these have been translated.
I am open to suggestions for other things to do with this corpus!
May Update
Hello fellow history fans!
This project is coming along well. As of right now, the agents have translated all the way from the semi-legendary Xia dynasty to the Sima Jin dynasty. I have an agent set up to spin up, translate 1 long chapter or 2 short chapters, and then shut down. It runs every hour. At this rate, the whole project should be done around September.
"Why not finish the project right now with 100 agents working in parallel?" you ask.
I have a Cursor Ultra subscription and it bills for Cursor's native model, Composer 2, separately from the other models. So I'm trying to use up all of my monthly agent token budget and not more.
I have applied for a grant to fund the project, so if that is approved I will get more agents to work at the same time. I am also having other agents go through and do editorial passes on the already translated sentences. That should help with the general quality, especially for the early chapters that I translated with weaker models.
Now that I have 4 completed books, I am looking at releasing e-books and selling them to fund the project. The website will always be free, but people may be willing to pay for the convenience factor of an e-book.
I have added a search feature, so users can search for chapter titles from the main page, and for any text from each of the book main pages.
Anyways, that's all for now. I have other ideas for what to do with this project after all translations are complete. I'd love to start building secondary materials into the site. But that is a long way away at this point.
The Translation Process
Creating a process for AI translation is not as easy as it sounds. LLMs are powerful tools, but they don't always behave as expected.
The problem I had early on was that the AI would give overly literal, character-by-character translations that weren't at all readable in English. Try as I might to cajole the AI into doing smooth, readable, idiomatic English translations, it kept slipping into stilted direct translations. My theory is that, as the context window gradually fills with more and more Chinese, text, the LLM starts to think in Chinese sentence structures. But that's just a guess. What matters is that the translations were bad, and they got worse the longer I let the context window get.Eventually the workflow I settled on was to have the AI generate first a literal translation then an idiomatic one. This is twice as much work, but the process forces the AI to think about the difference between a literal and idiomatic translation. I then only use the idiomatic version on the website.
I generate JSONs in batches of 15 sentences and have the AI fill them in in batches. So far I have just been calling Grok Code within Cursor repeatedly rather than setting up a proper pipeline to call the AI APIs directly. This is for two reasons:
- Ease of setup. I was already using Cursor to interact with AI and edit files.
- Grok Code is temporarily free for Cursor users, so I can do a lot of translating for free.
I know I should create a proper pipeline connecting to AI APIs eventually, but this is sufficient to get some translations out fast.
This is the full text of the prompt I have been calling repeatedly within a loop within Cursor. Note that it references various Makefile commands, which I have created for the AI to use. This is less error prone than having the AI write scripts on the fly.
Was that last chapter up to the standards of Ken Liu? If (and ONLY IF) you used any shortcuts or placeholders, you must now nuke the chapter and start again. If you choose to nuke the chapter, you MUST provide a written explanation of what you did wrong, why it had to be nuked, and how you will avoid this going forward. Otherwise, let's continue.
First, git pull and resolve and differences with remote.
Then run make start-translation BOOK=shiji.
Then add professional quality translations to translations/current_translation_shiji.json.
Run make continue BOOK=shiji.
Then, once again, add professional quality translations to translations/current_translation_shiji.json.
Run make continue again.
Continue this process in a loop until the chapter is fully translated.
Then run make submit-translations TRANSLATOR="Garrett M. Petersen (2026)" MODEL=(your model) FILE=(translation json you've been working on)
Continue repeating the above steps until you have fully completed a chapter, then use git to add, commit, and push your changes.
Translate that chapter in full using the process documented in the readme. Do it in batches until it is 100% complete. You don't need to do any of the following steps until you hit 100%. I don't care how many batches it takes!
Use the make score-translations command on your chapter to check the quality of your translations. It sometimes has false positives for length differences, but you should be able to see if anything is wildly wrong. Fix any issues. (Make sure there are NO placeholders where translations should be!)
Once the chapter has been completely translated with valid literal and idiomatic translations provided by YOU (the AI reading this), you're done.
I fully expect this to take a long time! NO placeholders. There is NO other translator coming to fill in your work. You must produce production-quality work without shortcuts.
Then run make update BOOK=shiji (or make update-all if you touched multiple books), and then push to github with an appropriate commit message, resolving any differences with remote.
Many of the lines in this prompt had to be added after the AI screwed up in some way. You can see the way I exhort it to not use placeholder text and shortcuts, and infer exactly the kind of issues I've been dealing with for the past few weeks. Lots of "[translation goes here]" in place of real translations.
I have inserted many automated checks into the scripts it calls that catch the most common problems. The most successful of these has been a check on the relative length of Chinese and English sentences. "[translation goes here]" will get automatically flagged because it is the same length regardless of the length of the underlying Chinese sentences.
I expect to make many improvements to this process going forward!
Welcome to the 24 Histories Blog
Hello! I'm Garrett Petersen and I'm the creator of the 24 histories project. Years ago, I tried to find translations of the 24 histories to read. I discovered that the vast majority of them have never been translated into English! I had to give up on ever reading them.
That was before AI got good enough to make really high-quality translations. When it did, I set out to make the definitive AI translation of all 24 histories. Anyone can AI translate passages on the fly, but I want a canonical version for English-readers to read and cite.
Hopefully this project can be enlightening to English-speaking history fans around the world!