
Version 2.2 is the smallest release TabNestor has ever had. No new features. Not a single line of functional code changed. All I did was rename two folders.
But if you use Chrome in Traditional Chinese or Portuguese, this is the release where TabNestor finally speaks your language — and it turns out it had been trying to for almost a year.
🌍 What’s Fixed in Version 2.2
Traditional Chinese (zh_TW) and Brazilian Portuguese (pt_BR) now display correctly.
Until this release, users of those two languages saw TabNestor in English. Not because the translations were missing — every string had been fully translated the whole time. They just never reached anyone.
🔍 What Was Actually Wrong
TabNestor ships its translations the standard Chrome way: one folder per language under _locales/, each holding a messages.json file.
On paper, everything was in order. All 19 languages carried exactly the same 92 keys. No missing entries, no empty strings. I checked.
But the Chrome Web Store listing told a different story. My own description said “19 languages.” The store’s own supported-languages count, generated from the extension itself, said 17.
The cause was the folder names.
Chrome decides which locale codes are valid, and it publishes the list. On that list you’ll find zh_TW — with an underscore. You’ll find pt_BR and pt_PT. What you won’t find is zh-TW with a hyphen, or plain pt with no region.
My two folders were named zh-TW and pt.
The Chrome documentation is direct about what happens next:
If you use an unsupported locale, Google Chrome ignores it.
Ignores it. Not “warns about it.” Not “fails to load.” The extension installs fine. It runs fine. It passes store review. Chrome simply behaves as though those two folders aren’t there.
🕳️ Why the Fallback Didn’t Catch It
Chrome resolves a language in three steps:
- Look for the user’s preferred locale.
- If that locale has a region, look for the same locale without the region.
- Fall back to the extension’s
default_locale.
Step 2 is the interesting one. A user in Brazil asks for pt_BR. TabNestor had no pt_BR folder — but it did have a pt folder, sitting right there, fully translated. Step 2 should have found it.
It didn’t. I can’t see inside Chrome, but there’s only one explanation that fits both the documentation and what users actually got: an unsupported folder name isn’t a folder Chrome checks and rejects, it’s a folder Chrome never looks inside at all. So step 2 came up empty, step 3 kicked in, and Brazilian users got English.
The translation existed on disk. It just wasn’t registered anywhere that Chrome would think to look.
📅 How Long This Was Happening
_locales/pt was added on 2024-10-24. _locales/zh-TW followed on 2024-11-13, in the release that first made TabNestor multilingual.
So this had been running for close to two years. All that time, TabNestor was described as supporting 19 languages. Two of them were reaching no one.
🧭 How I Finally Noticed
Not from a bug report. Not from testing. From a number on a page.
I was looking at the store listing and saw the language count sitting under the description: 17. My description above it said 19. That gap was the only signal that ever surfaced.
That’s the part I keep thinking about. There was no error to find. Nothing crashed, nothing logged, nothing failed to build. And I can only read a handful of those 19 languages myself, so “check whether the Portuguese UI is showing up” was never realistically something I was going to do. The only thing that noticed was a counter I hadn’t been reading.
✅ The Fix
Rename _locales/zh-TW to _locales/zh_TW. Rename _locales/pt to _locales/pt_BR — the strings in it were Brazilian Portuguese anyway. Update the language list in the README.
One character, and three. That’s the entire release.
💭 What I Take From This
There’s a version of this story where the lesson is “read the docs more carefully,” and that’s fair enough. But the part that actually stays with me is different.
Having complete translations and having them reach people turned out to be two separate things. The content was correct. The wiring was wrong. And the failure was invisible — not just to users, who had no way to know a Portuguese version existed, but to me, who had written every one of those strings.
TabNestor has hit this shape of bug before. In an earlier release, saved tab sets appeared to vanish from the list; the data was intact in storage the entire time, it simply wasn’t being rendered. Same structure: correct data, broken path to the person who needed it. From the outside, “it isn’t there” and “it’s there but you can’t see it” look identical.
I don’t have a clean process fix to offer here. What I do have now is one small habit: every time I ship, I look at the language count on the store listing and check that it still says 19.
📥 Update to TabNestor Version 2.2 — and if you read this in Traditional Chinese or Portuguese, you should be seeing it in your own language for the first time. That one’s overdue.
