Arayüz dili ve metin dili
Geliştirme · 1.0.0
Yayın
- Doküman
- 1.0.0
- Uygulama
- 1.0.0
- Şema
- 1
- Veri
- tr-latn-1
Bu sayfa
- Uygulama
- 1.0.0
İki Ayrı Seçim
Bölüm başlığı “İki Ayrı Seçim”| Seçim | Kaynak | Etkisi |
|---|---|---|
| Arayüz dili | Ortak @munderecat/i18n sözleşmesi; web’de munderecat_ui_locale cookie + UiProvider |
Menü, arama, gezinme, tema, okuma ayarları ve durum metinleri |
| Metin dili/yazısı | Canonical okuyucu adresi + mevcut reader preferences | Latin, Osmanlıca veya İngilizce corpus hedefi |
Arayüz dili değişikliği URL, hash, chapter/sentence ID, okuma hedefi, yazı boyutu, düzen veya corpus metnine müdahale etmez. İngilizce arayüzde Türkçe metin, Arapça arayüzde İngilizce metin okunabilir. Arapça arayüz desteği Arapça eser çevirisi bulunduğu anlamına gelmez. Osmanlıca, Türkçe metnin ayrı yazı hedefidir.
Web’de html.lang ve html.dir arayüzü ifade eder. article.lang/dir gerçek metnin
özelliğidir; kitap/bölüm adları mevcut catalog adresinin dilinde kalır.
Canonical ve hreflang adresleri corpus dillerini izlemeyi sürdürür.
Dosyalar
Bölüm başlığı “Dosyalar”packages/i18n/src/locales.ts: izin verilen kodlar, özgün dil adları, yön.packages/i18n/src/messages/*.json: 19 dilde aynı 132 anahtarlı arayüz sözlüğü; web ve mobil için tek kaynak, uygulama içinde kopyaları tutulmaz.packages/i18n/src/messages.ts: tipli mesaj sözleşmesi, biçimlendirme ve seçili dil dosyasının açık, statik yollu dinamik import haritasıyla yüklenmesi.packages/i18n/src/index.ts:@munderecat/i18nkaynak TypeScript giriş noktası.apps/web/src/i18n/locales.tsvemessages.ts: mevcut web import’larını koruyan reexport dosyaları;UI_LOCALE_COOKIEyalnız web’de tanımlanır.apps/web/src/i18n/provider.tsx: web arayüz state’i, document güncellemesi ve cookie kalıcılığı.apps/web/src/app/layout.tsx: cookie üzerinden doğru dilde ilk sunucu çıktısı.apps/web/src/components/shell/language-panel.tsx: arama ve seçili dil işareti.apps/mobile/src/lib/ui.tsx: native dil/tema state’i ve AsyncStorage kalıcılığı.apps/mobile/src/components/shell/: native ortak header, menü, dil ve arama panelleri.
Mobilde munderecat.ui.locale.v1 yalnız arayüz dilini saklar; okuma tercihleri
ayrı munderecat.reader.preferences.v1 kaydındadır. Provider önce kayıtları
yükler, sonra ekranları açar. Tercihler uygulama genelindedir; ayarlarda tema
değişince ana ekran ve menü de aynı temayı kullanır. Hızlı seçimlerde yazmalar
sıraya alınır; önceki yavaş yazma yeni tercihin üzerine geçemez. Depolama
başarısız olsa da açık oturumda seçim kullanılabilir.
Native RTL, arayüz satırlarının yönü ve metin hizasıyla uygulanır;
I18nManager.forceRTL çağrılıp uygulama yeniden başlatılmaz. Corpus metni kendi
yönünü korur. Uygulama menüsü ile dil/tema/arama arasında tek native modal
içinde geçilir; iOS’ta üst üste modal sunumu gerektirmez.
Ortak tüketici sözleşmesi:
import { UI_LOCALES, uiLocale, uiDirection, loadMessages, formatMessage, type UiLocale, type MessageKey, type Messages, type MessageValues,} from "@munderecat/i18n";import turkishMessages from "@munderecat/i18n/messages/tr.json";Türkçe JSON alt yolu native başlangıç state’ini senkron kurmak içindir; diğer
diller loadMessages(locale) ile yüklenir. Paket React, Next, Expo, DOM veya
depolama API’si kullanmaz. Native provider ve tercih kalıcılığı mobil uygulamanın,
cookie ve document entegrasyonu web uygulamasının sorumluluğudur. Değişken dosya
yollu import() kullanmayın: Metro her sözlüğü statik olarak keşfedebilmelidir.
Node testlerindeki JSON loader hook’u yalnız test ortamına aittir; tek argümanlı
Metro import’larını üretim kodunda Node’a özel import seçenekleriyle değiştirmez.
Türkçe varsayılandır. Destek: Türkçe, İngilizce, Arapça, Bengalce, Farsça, Fransızca, Endonezce, İtalyanca, Felemenkçe, Portekizce, Rusça, Arnavutça, Tayca, Urduca, Çince (basitleştirilmiş), Malayca, İspanyolca, Svahili ve Vietnamca. Bu liste incelenen Quran.com kaynak deposunun dil kapsamını örnek alır; Münderecat mesajları bu uygulama için yazılmıştır, referans çevirileri taşınmamıştır.
Web’de ilk dil sunucuda yüklenir; başka dilin JSON dosyası seçildiğinde yüklenir. Bütün çeviriler ilk HTML’e veya tek başlangıç payload’una eklenmez. Cookie yalnız dil kodu tutar; bir yıllık, Path=/, SameSite=Lax ve HTTPS’te Secure’dur. Cookie engellenirse açık uygulamada seçim çalışır fakat yenilemede kalmayabilir. Dil paketi yüklenemezse mevcut dil korunur; yeniden seçim yapılabilir. Kişiye göre HTML sunulduğu için CDN’de cookie’yi yok sayan ortak HTML cache’i açılmamalıdır. Content API ve veri artifact cache’leri bundan bağımsızdır.
Menü Ayrımı
Bölüm başlığı “Menü Ayrımı”Sağ üst sıra: Giriş Yap, Dil, Ara, Tema, Menü. Dar ekranda giriş yazısı kullanıcı ikonuna dönüşür; kontrol kaybolmaz. Marka solda, komutlar sağda kalır. Uygulama menüsü sağdan açılır; Kitaplar/Bölümler/Başlıklar/Sayfalar paneli ayrı bir içerik gezinmesidir. Arama aynı katalog arama motorunu kullanır; okuyucu İngilizce bağlamındayken sonuçlar İngilizce canonical adreslere gider. Arayüz dili seçimi arama sonuçlarının metin dilini değiştirmez.
Motor packages/reader-core/src/catalog-search.ts içindedir ve
@munderecat/reader-core üzerinden catalogSearchItems, searchCatalog,
parseSearchHistory, SEARCH_HISTORY_KEY, SEARCH_HISTORY_LIMIT,
CatalogSearchItem ve catalogSearchKey dışa aktarılır. Web’in
catalog-quick-search.ts ve catalog-search.ts dosyaları yalnız reexport yapar.
Sonuç etiketleri, sıralama, canonical adres seçimi ve geçmiş ayrıştırması ortaktır;
arama paneli, gezinme ve geçmişin depoya yazılması platformda kalır.
Giriş Yap şu an hesap girişinin henüz açılmadığını gösterir. Kimlik doğrulama, oturum, parola veya OAuth akışı bu teslimatta uygulanmamıştır. Sahte giriş formu veya veri toplayan alan yoktur. Dokümantasyon ve katalog bağlantıları header’dan kaldırılmıştır; footer ve uygun menü girişleri kalır.
Çeviri Güncelleme
Bölüm başlığı “Çeviri Güncelleme”- Yeni kullanıcı metnini İngilizce/Türkçe mesaj anahtarı olarak tanımlayın.
- Aynı PR’da bütün dil dosyalarını güncelleyin;
{title},{count}gibi parametreleri koruyun. Anahtar silerken de tüm dosyaları güncelleyin. - Bileşende
t("key", { count })kullanın. JSX metinleri ve erişilebilir etiketler de çeviri sözleşmesinin parçasıdır. pnpm --filter @munderecat/i18n testanahtar eşitliği, boş değerler, placeholder uyumu, dil/yön sözleşmesi ve 19 sözlüğün yüklenmesini denetler.pnpm --filter @munderecat/i18n typecheckmesaj tiplerini doğrular.pnpm --filter @munderecat/web testortak sözleşmeye reexport eşitliğini ve core JSX’te sabit metinleri kontrol eder; web typecheck’i de çalıştırın. Mobil içinpnpm --filter @munderecat/mobile testvetypecheckçalıştırın. Ortak arama değişirsepnpm --filter @munderecat/reader-core testvepnpm --filter @munderecat/reader-core typecheckçalıştırın.- Yeni yerleşimi uzun etiketlerle ve RTL arayüzde kontrol edin. Corpus yönü, noktalamaları ve sıralaması hiçbir zaman UI yönüne göre dönüştürülmez.
İlk çeviriler AI yardımıyla hazırlanmıştır; anahtar ve çalışma doğrulamaları tamamlanmıştır, bütün dillerde ana dil editörü onayı henüz yoktur. Dil doğruluğu ile teknik tamlık farklı kabul ölçütleridir. Editöryal düzeltmeler aynı JSON dosyaları üzerinden yapılır; DB rebuild veya yeni corpus release’i gerekmez.
Kapsam Sınırı
Bölüm başlığı “Kapsam Sınırı”Ana sayfa, katalog, ortak header/paneller ve ana okuyucu yerelleştirilmiştir. Geliştirici tasarım önizlemesinin açıklama içeriği, dokümantasyon metinleri, eski ayrıntılı annotation ekranı ve sunucu hata sayfaları bu çeviri setinin dışındadır. Bunların da çevrilmesi ayrı içerik işidir; 19 dilde corpus veya dokümantasyon varmış gibi gösterilmez. Mobil ana ekran, uygulama menüsü, arama, okuyucu araçları ve ayarlar aynı mesaj sözleşmesini kullanır. Web provider’ı native’e taşınmaz; platforma özgü kalıcılık ayrı kalır.
Tarayıcı testleri UI dili değişirken exact metin ve okuma tercihlerinin korunmasını, sunucu cookie çıktısını, üç metin hedefini, menü/arama odak dönüşlerini, 19 dilin yüklenmesini, mobil taşmayı ve RTL erişilebilirliğini kapsar.