Skip to content

Commit 68bf844

Browse files
fix(i18n): correct Turkish percent interpolation placeholders (TMCU-626) (#28469)
## **Description** This PR fixes Turkish translations that used `%{{variable}}` patterns, which conflict with the i18n parser’s `%{...}` placeholder syntax and can render `[missing ... value]` text in UI. Updated all affected `tr.json` strings to the safe/consistent form `{{variable}}%`, preserving meaning while preventing placeholder parsing collisions. ## **Changelog** CHANGELOG entry: Fixed Turkish percentage strings that could render missing placeholder text on the homepage and related flows. ## **Related issues** Fixes: #28412 Refs: [TMCU-626](https://consensyssoftware.atlassian.net/browse/TMCU-626) ## **Manual testing steps** ```gherkin Feature: Turkish percentage translations render correctly Scenario: Turkish UI shows percentage values without missing placeholder errors Given the app language is set to Turkish And the user opens views that render percentage-based strings (e.g. Homepage/Earn/Bridge/Perps) When percentage-based localized copy is displayed Then text should render with a numeric percentage format like "{{value}}%" And no "[missing ... value]" placeholder text should appear ``` ## **Screenshots/Recordings** ### **Before** <img width="396" height="843" alt="Screenshot 2026-04-07 at 15 46 14" src="https://github.com/user-attachments/assets/e4fcd7c9-355a-4a06-af99-9936963ce469" /> ### **After** <img width="393" height="838" alt="Screenshot 2026-04-07 at 15 47 30" src="https://github.com/user-attachments/assets/8a46f42d-589d-4982-a177-c1cf709efd1e" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Translation-only changes that adjust placeholder formatting; low functional risk, with the main risk being minor copy/format regressions if any string expects the old ordering. > > **Overview** > Fixes Turkish localization strings that embed percentage values by changing placeholders from `%{{var}}` to `{{var}}%` (and related word-order tweaks) across perps, swap/bridge quotes, slippage, fees, and Earn/mUSD copy. > > This prevents i18n interpolation collisions that could display `[missing ... value]` in the UI while keeping the same meaning and formatting for percent-based messages. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit eaacb8e. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> [TMCU-626]: https://consensyssoftware.atlassian.net/browse/TMCU-626?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Patryk Łucka <PatrykLucka@users.noreply.github.com>
1 parent 8575cca commit 68bf844

1 file changed

Lines changed: 25 additions & 25 deletions

File tree

locales/languages/tr.json

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,7 +1057,7 @@
10571057
"edit_button": "Düzenle"
10581058
},
10591059
"stop_loss_prompt": {
1060-
"near_liquidation_title": "Likidasyona yalnızca %{{distance}} uzaktasınız",
1060+
"near_liquidation_title": "Likidasyona yalnızca {{distance}}% uzaktasınız",
10611061
"near_liquidation_subtitle": "Pozisyonunuzun riskini azaltmak için marj ekleyin",
10621062
"add_margin_button": "Ekle",
10631063
"protect_losses_title": "Daha fazla zarara karşı korunun",
@@ -1300,7 +1300,7 @@
13001300
"current_price": "Mevcut fiyat",
13011301
"liquidation_price": "Likidasyon fiyatı",
13021302
"liquidation_distance": "Likidasyon mesafesi",
1303-
"liquidation_warning": "Fiyat %{{percentage}} {{direction}} yaşarsa pozisyonunuz likidasyona uğrar",
1303+
"liquidation_warning": "Fiyat {{percentage}}% {{direction}} yaşarsa pozisyonunuz likidasyona uğrar",
13041304
"drops": "düşüş",
13051305
"rises": "yükseliş",
13061306
"set_leverage": "{{leverage}} kaldıraç ayarla"
@@ -1730,7 +1730,7 @@
17301730
"provider_fee": "Sağlayıcı ücreti",
17311731
"bridge_fee": "Köprü ücreti",
17321732
"total": "Toplam ücretler",
1733-
"discount_message": "MetaMask Ödülleri ile %{{percentage}} tasarruf ediyorsunuz."
1733+
"discount_message": "MetaMask Ödülleri ile {{percentage}}% tasarruf ediyorsunuz."
17341734
},
17351735
"closing_fees": {
17361736
"title": "Kapatma ücretleri",
@@ -2359,7 +2359,7 @@
23592359
"slippage": "Kayma",
23602360
"price_details": "Fiyat bilgileri",
23612361
"prediction_order": "Tahmin emri",
2362-
"prediction_order_description": "Her biri {{price}} fiyatta ~{{count}} sözleşme. Son tutar, emir defteri kullanılabilirliğe göre değişiklik gösterebilir (%{{slippage}} orana kadar).",
2362+
"prediction_order_description": "Her biri {{price}} fiyatta ~{{count}} sözleşme. Son tutar, emir defteri kullanılabilirliğe göre değişiklik gösterebilir ({{slippage}}% orana kadar).",
23632363
"metamask_fee_description": "Bu tahmin işlemine yönelik hizmet ücreti",
23642364
"exchange_fee": "Borsa ücreti",
23652365
"exchange_fee_description": "Borsaya veya piyasaya ödenen ücret",
@@ -5395,8 +5395,8 @@
53955395
"included": "dahil",
53965396
"max_gas_fee": "Maks. gaz ücreti",
53975397
"edit": "Düzenle",
5398-
"quotes_include_fee": "%{{fee}} MetaMask ücreti tekliflere dahildir",
5399-
"quotes_include_gas_and_metamask_fee": "Gaz ve %{{fee}} MetaMask ücreti teklife dahildir",
5398+
"quotes_include_fee": "Tekliflere {{fee}}% MetaMask ücreti dahildir",
5399+
"quotes_include_gas_and_metamask_fee": "Teklife gaz ve {{fee}}% MetaMask ücreti dahildir",
54005400
"tap_to_swap": "Takas işlemi gerçekleştirmek için dokunun",
54015401
"swipe_to_swap": "Swap gerçekleştirmek için kaydır",
54025402
"swipe_to": "Swap gerçekleştirmek için",
@@ -5999,16 +5999,16 @@
59995999
},
60006000
"earn": {
60016001
"claimable_bonus_tooltip": "mUSD tuttuğunuz için kazandığınız yıllıklandırılmış bonus. Bonusunuzu Linea üzerinde günlük olarak alabilirsiniz.",
6002-
"earn_a_percentage_bonus": "%{{percentage}} bonus kazanın",
6003-
"percentage_bonus": "%{{percentage}} bonus",
6002+
"earn_a_percentage_bonus": "{{percentage}}% bonus kazanın",
6003+
"percentage_bonus": "{{percentage}}% bonus",
60046004
"claimable_bonus": "Alınabilir bonus",
60056005
"claim_bonus": "Bonusu al",
60066006
"claim_bonus_with_fiat": "Claim {{amount}}",
60076007
"claim_bonus_subtitle": "Bonus, {{networkName}} üzerinde ödenecektir.",
6008-
"percentage_bonus_on_linea": "Linea üzerinde %{{percentage}} bonus",
6008+
"percentage_bonus_on_linea": "Linea üzerinde {{percentage}}% bonus",
60096009
"claim": "Al",
60106010
"sounds_good": "Kulağa hoş geliyor",
6011-
"claimable_bonus_tooltip_with_percentage": "mUSD tuttuğunuz için kazandığınız %{{percentage}} yıllıklandırılmış bonus. Bonusunuzu Linea üzerinde günlük olarak alabilirsiniz.",
6011+
"claimable_bonus_tooltip_with_percentage": "mUSD tuttuğunuz için kazandığınız {{percentage}}% yıllıklandırılmış bonus. Bonusunuzu Linea üzerinde günlük olarak alabilirsiniz.",
60126012
"empty_state_cta": {
60136013
"heading": "{{tokenSymbol}} borç verin ve kazanın",
60146014
"body": "{{protocol}} ile {{tokenSymbol}} token'ınızı borç verin ve",
@@ -6094,14 +6094,14 @@
60946094
"musd_conversion": {
60956095
"ok": "Tamam",
60966096
"continue": "Devam et",
6097-
"convert_and_get_percentage_bonus": "Dönüştür ve %{{percentage}} al",
6097+
"convert_and_get_percentage_bonus": "Dönüştür ve {{percentage}}% al",
60986098
"your_musd": "mUSD bakiyeniz",
60996099
"balance_breakdown_title": "Ağa göre mUSD bakiyeleriniz",
61006100
"balance_amount": "{{amount}} mUSD",
61016101
"balance_amount_with_symbol": "{{amount}} {{symbol}}",
61026102
"balance_fiat_unavailable": "",
61036103
"convert_to_musd": "mUSD'ye dönüştür",
6104-
"get_a_percentage_musd_bonus": "%{{percentage}} mUSD bonus al",
6104+
"get_a_percentage_musd_bonus": "{{percentage}}% mUSD bonus al",
61056105
"convert": "Dönüştür",
61066106
"fetching_quote": "Teklif alınıyor...",
61076107
"you_convert": "Dönüştürdüğünüz tutar",
@@ -6117,31 +6117,31 @@
61176117
"failed": "mUSD dönüştürme işlemi başarısız oldu"
61186118
},
61196119
"education": {
6120-
"heading": "STABİL KRİPTO PARALARDA\n%{{percentage}} AL",
6121-
"description": "Stabil kripto paralarınızı mUSD'ye dönüştürün ve günlük olarak alabileceğiniz %{{percentage}} oranına varan yıllıklandırılmış bonus kazanın.",
6120+
"heading": "STABİL KRİPTO PARALARDA\n{{percentage}}% AL",
6121+
"description": "Stabil kripto paralarınızı mUSD'ye dönüştürün ve günlük olarak alabileceğiniz {{percentage}}% oranına varan yıllıklandırılmış bonus kazanın.",
61226122
"terms_apply": "Şartlar uygulanır.",
61236123
"primary_button": "Başlarken",
61246124
"secondary_button": "Şimdi değil"
61256125
},
61266126
"buy_musd": "mUSD al",
61276127
"get_musd": "mUSD kazan",
6128-
"bonus_title": "Stabil kripto paranızda %{{percentage}} bonus kazanın",
6129-
"bonus_description": "Stabil kripto paranızı mUSD'ye dönüştürün ve %{{percentage}} oranında yıllıklandırılmış bonus alın.",
6128+
"bonus_title": "Stabil kripto paranızda {{percentage}}% bonus kazanın",
6129+
"bonus_description": "Stabil kripto paranızı mUSD'ye dönüştürün ve {{percentage}}% oranında yıllıklandırılmış bonus alın.",
61306130
"powered_by_relay": "Destekleyen Relay",
61316131
"max": "Maksimum",
61326132
"quick_convert_button": "Dönüştür",
61336133
"learn_more": "Daha fazla bilgi edin",
61346134
"tooltip_title": "mUSD ile getiri elde et",
61356135
"tooltip_content": "USDC, USDT veya DAI'nizi MetaMask'in dolar destekli stabil kripto parası olan mUSD'ye dönüştürün. Tuttuğunuz her dolar için {{apy}} getiri elde edin.",
61366136
"quick_convert": {
6137-
"title": "Dönüştür ve %{{percentage}} al",
6138-
"subtitle": "Stabil kripto paralarınızı mUSD'ye dönüştürün ve günlük olarak alabileceğiniz %{{percentage}} oranına varan yıllıklandırılmış bonus alın.",
6137+
"title": "Dönüştür ve {{percentage}}% al",
6138+
"subtitle": "Stabil kripto paralarınızı mUSD'ye dönüştürün ve günlük olarak alabileceğiniz {{percentage}}% oranına varan yıllıklandırılmış bonus alın.",
61396139
"inline_failed_message": "Dönüştürme işlemi başarısız oldu. Tekrar deneyin.",
61406140
"confirmation": {
61416141
"title": "Maksimumu dönüştür"
61426142
}
61436143
},
6144-
"percentage_bonus": "%{{percentage}} bonus",
6144+
"percentage_bonus": "{{percentage}}% bonus",
61456145
"rate": "Oran"
61466146
},
61476147
"bonus_claim": {
@@ -6164,7 +6164,7 @@
61646164
},
61656165
"money": {
61666166
"title": "Para",
6167-
"apy_label": "%{{percentage}} Yıllık Bileşik Getiri",
6167+
"apy_label": "{{percentage}}% Yıllık Bileşik Getiri",
61686168
"action": {
61696169
"add": "Ekle",
61706170
"transfer": "Transfer Et",
@@ -6196,7 +6196,7 @@
61966196
"subtitle": "Paranızı dilediğiniz yerde harcayın.",
61976197
"virtual_card": "Sanal kart",
61986198
"metal_card": "Metal kart",
6199-
"cashback": "%{{percentage}} para iadesi",
6199+
"cashback": "{{percentage}}% para iadesi",
62006200
"get_now": "Hemen alın"
62016201
},
62026202
"why_metamask_money": {
@@ -6359,7 +6359,7 @@
63596359
"you_could_earn_up_to": "Yılda",
63606360
"per_year_on_your_tokens": "kazanabilirsiniz",
63616361
"deposit": "Para Yatır",
6362-
"gas_cost_impact_warning": "Uyarı: İşlemin gaz maliyeti yatırdığınız paranın %{{percentOverDeposit}} fazlası olacaktır.",
6362+
"gas_cost_impact_warning": "Uyarı: İşlemin gaz maliyeti yatırdığınız paranın {{percentOverDeposit}}% fazlası olacaktır.",
63636363
"earnings_history_title": "{{ticker}} kazançları",
63646364
"apr": "APR",
63656365
"interactive_chart": {
@@ -6719,7 +6719,7 @@
67196719
"title": "Köprü",
67206720
"submitting_transaction": "Gönderiliyor",
67216721
"fetching_quote": "Teklif alınıyor",
6722-
"fee_disclaimer": "%{{feePercentage}} MetaMask ücreti dahildir.",
6722+
"fee_disclaimer": "{{feePercentage}}% MetaMask ücreti dahildir.",
67236723
"no_mm_fee": "MM ücreti yok",
67246724
"no_mm_fee_disclaimer": "{{destTokenSymbol}} takasında MetaMask ücreti yok.",
67256725
"hardware_wallet_not_supported": "Donanım cüzdanları henüz desteklenmiyor. Devam etmek için sıcak cüzdan kullanın.",
@@ -6754,8 +6754,8 @@
67546754
"confirm": "Onayla",
67556755
"exceeding_upper_slippage_warning": "Yüksek kayma; bu durum istenmeyen bir takas ile sonuçlanabilir",
67566756
"exceeding_lower_slippage_warning": "Düşük kayma; bu durum istenmeyen bir takas ile sonuçlanabilir",
6757-
"exceeding_lower_slippage_error": "%{{value}} değerin üzerinde olan bir değer girin",
6758-
"exceeding_upper_slippage_error": "%{{value}} değerin üzerinde olan bir değer giremezsiniz",
6757+
"exceeding_lower_slippage_error": "{{value}}% değerin üzerinde olan bir değer girin",
6758+
"exceeding_upper_slippage_error": "{{value}}% değerin üzerinde olan bir değer giremezsiniz",
67596759
"custom": "Özel",
67606760
"invalid_recipient_address": "Geçersiz adres",
67616761
"select_quote": "Teklif Seç",

0 commit comments

Comments
 (0)