İçeriğe geç

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
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.

  • 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/i18n kaynak TypeScript giriş noktası.
  • apps/web/src/i18n/locales.ts ve messages.ts: mevcut web import’larını koruyan reexport dosyaları; UI_LOCALE_COOKIE yalnı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.

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.

  1. Yeni kullanıcı metnini İngilizce/Türkçe mesaj anahtarı olarak tanımlayın.
  2. Aynı PR’da bütün dil dosyalarını güncelleyin; {title}, {count} gibi parametreleri koruyun. Anahtar silerken de tüm dosyaları güncelleyin.
  3. Bileşende t("key", { count }) kullanın. JSX metinleri ve erişilebilir etiketler de çeviri sözleşmesinin parçasıdır.
  4. pnpm --filter @munderecat/i18n test anahtar 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 typecheck mesaj tiplerini doğrular. pnpm --filter @munderecat/web test ortak 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çin pnpm --filter @munderecat/mobile test ve typecheck çalıştırın. Ortak arama değişirse pnpm --filter @munderecat/reader-core test ve pnpm --filter @munderecat/reader-core typecheck çalıştırın.
  5. 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.

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.