没有不值得去解决的问题,也没有不值得去学习的技术!

How I Manually Translated 695 Blog Categories in 4 Hours: A Pitfall Guide

Here is a screenshot of the category results after my translation (See Figure 11)

In my previous post, I shared how to select and configure a multilingual plugin. Today, I am moving on to the most time-consuming and patience-testing step: translating categories. My blog has a total of 695 categories, and it took me 4 hours to manually translate them all. My fingers are almost worn out 😭. I hit quite a few snags along the way, so today I am sharing the complete workflow and pitfall-avoidance tips to help you save time and avoid detours. I also hope more bloggers can successfully go multilingual and bring their content to a wider audience.
First, let me explain my category structure: among the 695 categories, over 200 are in Chinese, and the rest are in English (added sporadically before). The categories have a strict hierarchical relationship (Level 1 → Level 2 → Level 3 → Level 4 → Level 5). For example, the Level 1 category is “IT Community”, the Level 2 category is “CSS Frameworks”, and the Level 3 category is “Bootstrap”. For a content-sharing blog, categories are the core entry point for users to find content. This is especially true for overseas users; clear and standardized English categories allow them to quickly find the technical content they need. Therefore, category translation must not only preserve the hierarchy but also ensure standard formatting and semantic accuracy.
Core prerequisite: The free version of AutoPoly does not support automatic category translation, so you must translate them manually. Furthermore, you must translate them hierarchically from top to bottom (first Level 1, then Level 2, then Level 3, then Level 4, then Level 5). Otherwise, subcategories will become “orphan categories,” completely disrupting the hierarchy and affecting how overseas users find content. (See Figure 1)

Core prerequisite: The free version of AutoPoly does not support automatic category translation, so you must translate them manually. Furthermore, you must translate them hierarchically from top to bottom (first Level 1, then Level 2, then Level 3, then Level 4, then Level 5). Otherwise, subcategories will become "orphan categories," completely disrupting the hierarchy and affecting how overseas users find content. (See Figure 1)

1. Category Translation Preparation (Mandatory)
1. Define translation standards (to avoid bulk modifications later and ensure a good user experience):
① English category names: Capitalize the first letter of each word (Title Case). For example, translate “应用工具” as “Application Tools” (the plural form better fits the semantics of a section and aligns with the reading habits of English-speaking users);
② English category slugs: Use all lowercase letters and connect words with hyphens, such as “application-tools”. This makes it easier for overseas users to remember and for search engines to index. Try to keep it consistent with the Chinese slug;
③ Note: Polylang automatically appends an “-en” suffix to English category slugs (to prevent duplication with Chinese slugs). There is no need to modify this manually; it does not affect overseas users’ ability to find content or impact SEO.
2. Filter categories by level (crucial for saving time and avoiding confusion):
Categories have a hierarchy, so you cannot translate them randomly. You must first filter out the Level 1 categories, translate them, and then filter out Level 2, Level 3, Level 4, and Level 5. Since the WordPress backend does not have a hierarchical filtering feature by default, I used a piece of JS code to filter the corresponding level with one click (tested and working):
① Show only Level 1 categories (hide Level 2, Level 3, Level 4, Level 5) (See Figure 2):

Show only Level 1 categories (hide Level 2, Level 3, Level 4, Level 5) (See Figure 2)
JavaScript
jQuery('tbody tr').show();
jQuery('tbody tr').filter(function(){
    return jQuery(this).find('td:first').text().trim().indexOf('—') === 0;
}).hide();

② Show only Level 2 categories (hide Level 1, Level 3, Level 4, Level 5) (See Figure 5):

Show only Level 2 categories (hide Level 1, Level 3, Level 4, Level 5) (See Figure 5)
JavaScript
jQuery('tbody tr').show();
jQuery('tbody tr').filter(function(){
    let t = jQuery(this).find('td:first').text().trim();
    return !(t.indexOf('—') === 0 && t.split('—').length === 2);
}).hide();

③ Show only Level 3 categories (hide Level 1, Level 2, Level 4, Level 5) (See Figure 7):

Show only Level 3 categories (hide Level 1, Level 2, Level 4, Level 5) (See Figure 7)
JavaScript
jQuery('tbody tr').show();
jQuery('tbody tr').filter(function(){
    let t = jQuery(this).find('td:first').text().trim();
    return t.split('—').length !== 3;
}).hide();

④ Show only Level 3 categories (hide Level 1, Level 2, Level 4, Level 5) (See Figure 8):

Show only Level 3 categories (hide Level 1, Level 2, Level 4, Level 5) (See Figure 8)
JavaScript
jQuery('tbody tr').show();
jQuery('tbody tr').filter(function(){
    let t = jQuery(this).find('td:first').text().trim();
    return t.split('—').length !== 4;
}).hide();

⑤ Show only Level 3 categories (hide Level 1, Level 2, Level 4, Level 5) (See Figure 9):

Show only Level 3 categories (hide Level 1, Level 2, Level 4, Level 5) (See Figure 9)
JavaScript
jQuery('tbody tr').show();
jQuery('tbody tr').filter(function(){
    let t = jQuery(this).find('td:first').text().trim();
    return t.split('—').length !== 5;
}).hide();

How to use: Go to the backend → Posts → Categories, press F12 to open the console, paste the corresponding code, and press Enter to filter with one click. Refreshing the page restores all categories, which saves a lot of manual filtering time.

2. Complete Category Translation Workflow (Step by Step)
Do this entirely within the Chinese backend. Do not create new categories in the English backend, as this will disrupt the hierarchy. Using the Level 1 category “IT Community” as an example, here is the step-by-step guide:
1. Switch the backend to Chinese (China), go to Posts → Categories, paste the Level 1 filtering code from above, and filter out all Level 1 categories;
2. Find the “IT Community” category, click the “+” icon on the right (Add translation), and select “English”;
3. The English category edit window will pop up. Fill in the translated content (focus on semantic accuracy to help overseas users understand it) (See Figure 3):

The English category edit window will pop up. Fill in the translated content (focus on semantic accuracy to help overseas users understand it) (See Figure 3)


① Category name: Enter the translated English text (e.g., “IT Community”);
② Category slug: Enter the English slug consistent with the Chinese slug (e.g., “it-community”);
③ Parent category: No need to select one (this is a Level 1 category);
④ Description: Can be left blank;
4. Click “Add Category” to save it;
5. After finishing one page, you can click the next page, then in the console, press the ⬆ key to quickly bring up the last executed JS command without needing to copy and paste again;
6. Switch the language at the top to English, and hover your mouse over the “View” link. You will notice its URL is https://www.shuijingwanwq.com/en/category/it-community-en/ . This confirms that after adding and saving a category, Polylang automatically appends the “-en” suffix, turning it into “it-community-en”, and the category link includes /en, which is exactly as expected (See Figure 4);

Switch the language at the top to English, and hover your mouse over the "View" link. You will notice its URL is https://www.shuijingwanwq.com/en/category/it-community-en/ . This confirms that after adding and saving a category, Polylang automatically appends the "-en" suffix, turning it into "it-community-en", and the category link includes /en, which is exactly as expected (See Figure 4)


7. Repeat steps 2-4 until all Level 1 categories are translated (Level 1 categories are the core entry point for users to find content, so prioritize translating them);
8. Once Level 1 categories are translated, paste the Level 2 category filtering code to filter out all Level 2 categories. Repeat steps 2-4 to translate the Level 2 categories (at this point, the parent category will automatically match the already translated English Level 1 category, so no manual selection is needed), ensuring a clear hierarchy (See Figure 6);

Once Level 1 categories are translated, paste the Level 2 category filtering code to filter out all Level 2 categories. Repeat steps 2-4 to translate the Level 2 categories (at this point, the parent category will automatically match the already translated English Level 1 category, so no manual selection is needed), ensuring a clear hierarchy (See Figure 6)


9. After translating the Level 2 categories, use the same method to translate Level 3, Level 4, and Level 5 categories, ensuring every category is accurately translated for overseas users to find;
10. A quick tip: When you find the “IT Community” category and click the “+” icon on the right, I recommend opening it in a new tab. You can then use these keyboard shortcuts:
Switch to the next tab: Ctrl + Tab
Switch back to the previous tab: Ctrl + Shift + Tab
This makes it easy to switch back and forth between the category list page and the add category page, allowing you to quickly copy the category slug and name. It also prevents the page from automatically redirecting back to the category list after adding a category, which would cause the JS-filtered category hierarchy to be lost;
11. After finishing a category level, you need to check it page by page again to ensure all Chinese categories have corresponding English categories. However, you might find that for some Chinese categories, adding the corresponding English category and saving it repeatedly fails. In this case, you need to delete the corresponding English category and add it again.

3. Three Pitfalls Encountered During Translation (Must Read)
1. Skipping levels causes hierarchy disruption: At first, I wanted to save time by translating Level 2 categories first. After translating them, the Level 2 categories turned into Level 1 categories, which confused overseas users trying to find content. I had to delete and retranslate them, wasting half an hour. Remember: You must translate level by level in the order of “Level 1 → Level 2 → Level 3 → Level 4 → Level 5”. The parent category must have an English translation first to ensure a clear hierarchy.
2. Manually modifying English slugs causes conflicts: I once tried to remove the “-en” suffix from the English slug to keep it consistent with the Chinese slug. After saving, the “-en” suffix was still automatically added. I later realized this is a mandatory rule in Polylang to avoid conflicts, so there is no need to modify it—just let it be.
3. Confusion between singular and plural category names: For example, for “应用工具”, I initially translated it as “Application Tool” (singular). Later, I realized that a section is a collection, and English-speaking users are more accustomed to the plural form “Application Tools”, so I had to modify them in bulk, wasting time. I recommend deciding before translating: use plurals for section-style categories and singulars for specific single items, aligning with the reading habits of English-speaking users.

4. Summary and Future Plans
695 categories, manually translated in 4 hours. Although tiring, it was highly rewarding—once this step was completed, the category structure for the English site was set up. Overseas users can quickly find the technical content they need through standardized and clear English categories, and my content can finally cross language barriers to reach a wider audience.
Here is a small piece of advice: you do not have to finish translating categories all at once. You can do it in batches, such as translating 200 a day over 3-4 days, to avoid excessive finger fatigue. Additionally, when you encounter category names that are hard to translate, do not get stuck on them. Just use simple, easy-to-understand English. The key is semantic accuracy and user comprehension. After all, our core goal is sharing, not pursuing perfection.
Now that the category translation is done, the next task is even more massive: translating 8062 tags. Tags supplement content, and accurate English tags allow overseas users to find relevant content more precisely. I plan to use SQL to bulk-generate English translation entries, and then manually modify the tags containing Chinese. In the next post, I will share the detailed practical workflow for tag translation and how to use SQL statements (beginner-friendly throughout), so stay tuned~
Finally, here is a screenshot of the category results after my translation (See Figure 11). The total number of Chinese and English categories is equal. The English category names are standardized, the hierarchy is clear, and it perfectly replicates the Chinese category structure. This enables overseas users to quickly find the content they need and lays a solid foundation for my future content sharing.

Here is a screenshot of the category results after my translation (See Figure 11)
系列导航

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系