Conversation
BetterVoting ships four languages and there is no way to discover that from the interface -- i18n.ts uses the browser language detector, and nothing in packages/frontend/src offers a language switcher. The only way to choose one is the ?lng= URL parameter, which is documented for translators in the contribution guide and nowhere a voter would ever look. Covers: that detection is automatic and most people need nothing; the codes for the four current languages; how to append the parameter to a link that already has a query string; and how to help add a language. Three things the page is careful about, all of which have caught people out: - The choice is CACHED. i18next-browser-languagedetector's default order writes the selection to localStorage and a cookie, so it persists after the parameter is gone -- and returning to English needs an explicit ?lng=en rather than just dropping the parameter. This gets its own warning callout; it is the single most confusing behaviour here. - Mixed English is CORRECT, not broken. Only Priority 0 is translated and fallbackLng is 'en', so a page can legitimately be part translated. Saying so prevents a voter reporting it as a fault. - The election's own content is never translated. Candidate names, race titles, descriptions and the organiser's emails are whatever they wrote. A Spanish interface can carry an English ballot question, and that is the system working correctly. The admin section draws the practical conclusion: sending ?lng= links is worth doing for a known-language group, but it translates the buttons around your text and not the text itself, so a genuinely bilingual electorate is better served by writing the race description in both languages. Lists only the four languages currently on main. German is in review (Equal-Vote#1560) and can be added in a one-line follow-up once it merges. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
✅ Deploy Preview for bettervoting ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
Warning Review limit reached
Next review available in: 47 minutes Limit details: You’ve used all 1 included review currently available under your plan. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Adds the three languages currently in review to the table, marked so the page stays truthful either way: a voter who tries ?lng=de before it merges learns that from the page rather than from a screen that stubbornly stays English. The marker is prose rather than a PR number, so the only edit needed when they land is deleting three words -- no link to rot, and nothing that reads oddly to a user who has no idea what a pull request is. Also splits the closing line in two. It was doing two jobs at once: telling readers the list may lag reality, and telling them to just try their code. The second is the actionable half and now stands on its own. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The examples used https://bettervoting.com/your-election-id?lng=es in a fenced code block. A code block invites copying, and the URL is well formed, so the natural thing a reader does is paste it -- and gets '400: Election not found', because no election has that id. Confirmed by a reader doing exactly that. Two changes: - The instruction now leads with what the reader actually has to do -- take YOUR address and append the parameter -- instead of presenting a URL to imitate. The placeholder is a short opaque id (a1b2c3) that reads as a stand-in rather than a real path segment, and the page says outright that opening the examples as written will error. - The ?-vs-& case becomes a three-column table (your link, what to add, the result) rather than a second pasteable URL. That was the harder half to explain and the table carries it better than prose did. Neither example now sits alone in a code fence where it can be mistaken for something to run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
||
| ## Choosing a language yourself | ||
|
|
||
| There is no language menu on the site. To pick a language, **take the address you already have and add `?lng=` and the language code to the end of it**. |
There was a problem hiding this comment.
I can get a language selector added soon. I'll block this PR behind that feature
Description
Adds
docs/help/using_another_language.md.BetterVoting ships four languages and there is no way to discover that from the interface.
i18n.tsuses the browser language detector, and nothing inpackages/frontend/srcoffers a language switcher —i18n.languageis used only for list formatting. The sole way to choose a language is the?lng=parameter, which is documented for translators in the contribution guide and nowhere a voter would ever look.Covers: detection is automatic and most people need nothing; the codes for the four current languages; how to append the parameter when the link already has a query string; and how to help add a language.
Three things the page is careful about
The choice is cached.
i18next-browser-languagedetector's default order writes the selection to localStorage and a cookie, so it persists after the parameter is gone — and getting back to English needs an explicit?lng=en, not just dropping the parameter. This gets its own warning callout; it's the most confusing behaviour here and the one most likely to generate a support message.Mixed English is correct, not broken. Only Priority 0 is translated and
fallbackLngis'en', so a page can legitimately be part-translated. Saying so plainly stops a voter reporting it as a fault.The election's own content is never translated. Candidate names, race titles, descriptions and the organiser's emails appear exactly as written. A Spanish interface can carry an English ballot question — that's the system working correctly, and it isn't obvious.
The admin section draws the practical conclusion: sending
?lng=links is worth doing for a known-language group, but it translates the buttons around your text, not the text itself — so a genuinely bilingual electorate is better served by writing the race description in both languages.Language list. Lists only the four currently on
main. German is in review (#1560) and can be added in a one-line follow-up once it merges.Verification. Local build (
github-pages, Jekyll 3.9): renders, sits under theBetterVoting Documentationparent, no unrewritten.mdhrefs.Screenshots / Videos (frontend only)
n/a — documentation.
Related Issues
Part of the documentation program in #1556. Complements #1560 (German translation).