Repository navigation
[Payment due @abzokhattab] Add Greek (el) as beta locale - #95655
Conversation
Add el to BETA_LOCALES with Ελληνικά display name. Co-authored-by: Cursor <cursoragent@cursor.com>
Add el loader to IntlStore (date-fns/locale/el), map el to Apple Sign In's el_GR locale, and load el Intl.ListFormat polyfill data. Note: src/languages/el.ts does not exist yet; typecheck passes once added in a follow-up commit. Co-authored-by: Cursor <cursoragent@cursor.com>
Add glossary and tone rules for Greek to guide translation generation (formal register, gender/case agreement). Co-authored-by: Cursor <cursoragent@cursor.com>
Generate src/languages/el.ts from en.ts via generateTranslations.ts, using the base and Greek-specific prompts. 6,048 strings translated with zero failures. Co-authored-by: Cursor <cursoragent@cursor.com>
Match the existing pattern for other AI-generated locale files; still type-checked, just not linted as hand-authored source. Co-authored-by: Cursor <cursoragent@cursor.com>
Match the existing ignorePaths pattern for other beta locales; without this, CI spell-check fails on ~10k lines of Greek text. Co-authored-by: Cursor <cursoragent@cursor.com>
Ελληνικά in LOCALES.ts's LOCALE_TO_LANGUAGE_STRING is hand-written (not covered by ignorePaths), so it needs a words entry like the other locales' native display names (Deutsch, Français, etc.). Co-authored-by: Cursor <cursoragent@cursor.com>
|
CI failed on two unrelated, pre-existing test failures (both look like date/time-bomb bugs, not caused by this PR's Greek locale changes):
Both tests use a hardcoded transaction
Tracked in Fix flaky test ReportSecondaryActionUtilsTest/ReportPreviewActionUtilsTest. |
|
🚧 roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
Expensify Neue/Mono/New Kansas and the emoji fonts only cover Latin script and emoji glyphs. With no generic fallback at the end of the web font stack, glyphs missing from all of them (e.g. Greek) fell through to the browser's own default font, which is a serif font. Append a standard system font stack after the emoji fonts so uncovered scripts render in a sans-serif system font instead. Co-authored-by: Cursor <cursoragent@cursor.com>
|
🚧 roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
main gained new copy (Agents, Rillet, onboarding, card statuses, etc.) since el.ts was generated, breaking typecheck. Regenerate incrementally against the pre-merge branch tip and manually fix Rillet export value keys the translator flattened incorrectly. Co-authored-by: Cursor <cursoragent@cursor.com>
|
🚧 roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
This comment has been minimized.
This comment has been minimized.
react-native-render-html keeps only the first whitelisted face, so Greek in RenderHTML lost our system sans-serif fallbacks and rendered as serif. Remap brand faces to full platform stacks via fallbackFonts. Co-authored-by: Cursor <cursoragent@cursor.com>
|
🚧 roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
@dubielzyk-expensify I think that newest AdHoc build should fix the pieces of serif font you pointed out. However, I'd love your advice on how to fix the LHN word wrapping issues we were seeing. It sounds like there's no shorter word that would be a natural fit for either Inbox or Account, so that gives us a few options:
|
Fill missing el.ts keys from main and satisfy ESLint naming on the HTML font fallback map key for the CSS sans-serif generic family. Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
NAB: i would recommend adding unit tests for the newly added removeZeroWidthCharacters and normalizeForMatch functions in this util file
abzokhattab
left a comment
There was a problem hiding this comment.
The changes look good to me
|
lets fix the failing pipeline |
|
@chuckdries Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
🎯 @abzokhattab, thanks for reviewing and testing this PR! 🎉 A payment issue will be created for your review once this PR is deployed to production. If payment is not needed (e.g., regression PR review fix etc), react with 👎 to this comment to prevent the payment issue from being created. |
|
@MelvinBot please fix failing typecheck in this pull request. |
|
🤖 Fixed the failing Root cause: Fix:
|
|
Types still failing |
390529d to
061f68c
Compare
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 chuckdries has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/chuckdries in version: 9.4.49-0 🚀
|
Help site review — docs update required ✅This PR adds Greek (Ελληνικά) as a new beta locale. That is user-facing, and one help article documents the set of supported languages:
The rest of the diff (locale registration, font/emoji/Intl polyfill wiring, generated Draft PR: #97739 I added @MelvinBot, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
Deploy Blocker #97781 was identified to be related to this PR. |
|
🤖 Payment issue created: #97830 |
|
🚀 Deployed to production by https://github.com/arosiclair in version: 9.4.49-3 🚀
Bundle Size Analysis (Sentry): |







Explanation of Change
Adds Greek (
el) as a new beta locale. RegisterselinLOCALES.ts, wires runtime loading inIntlStore(translations +date-fnslocale), maps Apple Sign In'sel_GRlocale, loads GreekIntl.ListFormatpolyfill data, adds a Greek translation prompt/glossary, and generatessrc/languages/el.tsfromen.ts(6,048 strings, zero translation failures). Excludes the generated file from ESLint and cspell, matching every other beta locale's pattern.This lands the infra prerequisite for Add Greek as a language to E/App, part of the translator-hiring epic #504749. Greek ships as beta: AI-generated, unaudited, no localized emoji keywords — same limitations as
de/fr/ja/etc. Promoting to fully-supported happens after expert audit in a follow-up.Fixed Issues
$ https://github.com/Expensify/Expensify/issues/657039
PROPOSAL:
Tests
undefined/[object Object], and no missing-key errors.Offline tests
N/A — locale files are bundled at build time; no network-dependent behavior changes.
QA Steps
Same as Tests.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
N/A — web-only locale infra change, no native platform code touched.
Android: mWeb Chrome
N/A — see MacOS: Chrome / Safari for representative web coverage.
iOS: Native
N/A — web-only locale infra change, no native platform code touched.
iOS: mWeb Safari
N/A — see MacOS: Chrome / Safari for representative web coverage.
MacOS: Chrome / Safari