Dil ve çeviri
Bu sayfa arayüzün dilinin nasıl seçildiğini, dil seçiciyi ve metinleri çevirmeyi anlatır.
Acun UI Türkçe ve İngilizce arayüzle gelir. Uygulama hangi dildeyse bileşenler o dilde görünür. Sayılar (1.234,5 / 1,234.5) ve kısa tarihler (05.10.2026 / 10/05/2026) de dile uyar.
En kısa örnek
// bootstrap/app.php
use Acun\Ui\Http\Middleware\SetLocale;
->withMiddleware(function (Middleware $middleware): void {
$middleware->web(append: SetLocale::class);
})
{{-- resources/views/layouts/admin/sections/navbar.blade.php --}}
<acun:slot:actions><acun:locale-switcher /></acun:slot:actions>
Temada ikisi de hazırdır. Ara katman her isteğin dilini seçer; ziyaretçi dili üst çubuktaki seçiciden değiştirir. Livewire güncellemeleri de web grubundan geçtiği için aynı dili kullanır.
Ziyaretçinin dili
SetLocale dili şu sırayla seçer:
- Kayıtlı tercih: Giriş yapmış kullanıcının hesabındaki alan, yoksa dil seçicinin çerezi.
- Tarayıcının dili: Tarayıcı dillerinden sunulan ilk dil.
en-USgibi bir değerensayılır. - Ülke:
countrieslistesindeki ülke kendi dilini alır, örneğin Türkiye Türkçe. Bilinen başka bir ülke yedek dili alır. - Yedek dil: Hiçbiri karar vermezse
fallback, varsayılan olarak İngilizce.
Ülke bilgisinin nereden geldiği sayfanın sonunda, İleri düzey bölümünde.
Sık kullanılan seçenekler
Dil ayarları config/acun-ui.php dosyasının locale bloğundadır. Yazmadığınız anahtarlar paketin varsayılanını kullanır:
'locale' => [
'supported' => ['tr', 'en'],
'fallback' => 'en',
'countries' => ['TR' => 'tr'],
'user_attribute' => 'dil_tercihi', // null: yalnızca çerez
],
| Seçenek | Ne yapar | Varsayılan |
|---|---|---|
supported |
Sunulan diller; seçici bunları listeler. | ['tr', 'en'] |
fallback |
Hiçbir kural karar vermezse kullanılan dil. | 'en' |
countries |
Ülke kodu → dil eşleşmesi. | ['TR' => 'tr'] |
user_attribute |
Seçimin saklandığı hesap tablosu alanı. | null (yalnızca çerez) |
cookie |
Seçimin saklandığı çerezin adı. | 'acun_locale' |
names |
Seçicide görünen adlar, her biri kendi dilinde. | Türkçe, English |
flags |
Her dilin bayrağı, ülke kodu olarak. | tr → tr, en → gb |
country_headers |
Ülke kodunu taşıyan istek başlıkları. | Cloudflare, CloudFront, Vercel |
Dil seçici
<acun:locale-switcher /> üst çubuğa konur. Sunulan dilleri kendi adları ve bayraklarıyla listeler: Türkçe, English.
- Seçim
acun-ui.localerotasına gönderilir ve 400 gün geçerli bir çerezde saklanır. Sayfa yeni dilde yeniden açılır. user_attributebir alan adı verirse seçim giriş yapmış kullanıcının hesabına da yazılır. Bu alan çerezden önce gelir; tercih cihazlar arasında korunur.- Bayraklar ülke kodlarıdır:
tr,gb,us,de,fr,es,it,nl,ru. İngilizce için ABD bayrağını isterseniz'flags' => ['en' => 'us']yazın. Bayrağı olmayan dilde bayrak gösterilmez. - Yalnızca bir dil sunuluyorsa seçici görünmez.
align="start"listeyi sola hizalar; varsayılanend.
Paketin metinlerini değiştirmek
Bileşenlerin iki tür metni vardır:
| Metin türü | Örnek | Nasıl değiştirilir |
|---|---|---|
| Çeviri anahtarı | "Clear selection", "Close", "Change theme" | Uygulamanın lang/*.json dosyası |
| Prop | title, label, placeholder, cancel-text |
Bileşeni kullanırken kendi metninizi verin |
Paketin anahtarı metnin İngilizcesidir; Türkçesi paketin lang/tr.json dosyasındadır. Uygulamanızın lang/tr.json dosyasına aynı anahtarı yazarsanız sizinki kullanılır. İngilizceyi değiştirmek için lang/en.json dosyasını kullanın:
// lang/tr.json
{ "Clear selection": "Seçimi kaldır" }
// lang/en.json
{ "Could not copy": "Copy failed" }
Paketin bütün anahtarları vendor/acunsoft/acun-ui-free/lang/tr.json ve vendor/acunsoft/acun-ui-pro/lang/tr.json dosyalarındadır. Başka bir dil eklemek için anahtarları o dilin dosyasına çevirin ve dili supported listesine ekleyin.
Uygulamanın kendi metinleri
Başlık, etiket, açıklama ve boş durum metinleri bileşene sizin verdiğiniz değerlerdir. Çok dilli bir uygulamada bunları __() ile verin. Uygulamanız Türkçe yazılıyorsa anahtar Türkçe olabilir; İngilizcesi lang/en.json dosyasına gider:
<acun:confirmation-dialog name="user-delete" :title="__('Kullanıcıyı sil')">
<acun:button variant="danger" wire:click="delete">{{ __('Sil') }}</acun:button>
</acun:confirmation-dialog>
// lang/en.json
{ "Kullanıcıyı sil": "Delete user", "Sil": "Delete" }
JSON menüdeki başlıklar ve bölüm adları da çeviri anahtarıdır. Livewire sayfasının #[Title] değerini düzen çevirir. Çevirisi olmayan metin olduğu gibi görünür.
Çoğul metinler
trans_choice() metni yalnızca anahtar o dilin JSON dosyasında varsa o dilde arar. Yoksa yedek dile geçer. Türkçe anahtar lang/tr.json dosyasında yoksa Türkçe sayfada İngilizce metin görünür.
Dikkat
Türkçe anahtarlı bir uygulamada
trans_choice()ile kullandığınız her anahtarılang/tr.jsondosyasına kendisiyle eşleyerek yazın.
{{ trans_choice(':count ürün|:count ürün', $sayi, ['count' => $sayi]) }}
// lang/tr.json
{ ":count ürün|:count ürün": ":count ürün|:count ürün" }
// lang/en.json
{ ":count ürün|:count ürün": ":count product|:count products" }
__() bu şekilde davranmaz: anahtar bulunmazsa anahtarın kendisini gösterir.
Sayı ve tarih biçimi
{{ \Acun\Ui\Support\Localization::number(1234.5, 1) }} {{-- 1.234,5 · 1,234.5 --}}
{{ \Acun\Ui\Support\Localization::date($siparis->created_at) }} {{-- 05.10.2026 · 10/05/2026 --}}
number() ikinci değerde ondalık basamak sayısını alır. İkisi de sayfanın o anki dilini kullanır.
İleri düzey
Ülke bilgisi
Ülke kodu şu istek başlıklarından okunur: CF-IPCountry (Cloudflare), CloudFront-Viewer-Country (CloudFront), X-Vercel-IP-Country (Vercel) ve X-Country-Code (kendi vekil sunucunuz). Liste country_headers ile değiştirilir. Cloudflare'in XX (bilinmiyor) ve T1 (Tor) değerleri bilinmiyor sayılır.
Bu başlıkların olmadığı bir sunucuda kendi GeoIP aramanızı bağlayabilirsiniz. Fonksiyon iki harfli ülke kodu ya da null döner:
// AppServiceProvider::boot()
use Acun\Ui\Support\Localization;
Localization::countryUsing(fn (Request $request) => GeoIp::country($request->ip()));
Paket ziyaretçinin IP adresini hiçbir dış servise göndermez.
Önbellek
Sayfa dile göre değiştiği için ara katman yanıta Vary: Accept-Language, Cookie ekler. Böylece bir önbellek her dil için ayrı kopya tutar.
Arama ve Türkçe karakterler
DataTable ve WithListing araması (->searchable(), applySearch()) büyük/küçük harfe ve Türkçe karakterlere duyarsızdır. ı, İ, I ve i aynı harf sayılır; ş/s, ç/c, ğ/g, ö/o, ü/u eşleşir. Kullanıcı "ayse" yazsa da "Ayşe" bulunur. Bu eşleştirme veritabanında, üretilen bir arama sütununda yapılır; ayrıntılar Arama sayfasında.
acun:combobox'ın tarayıcıdaki araması da aynı kuralla çalışır. Komut paleti sayfanın dilinin büyük/küçük harf kurallarını uygular: Türkçe sayfada "İSTANBUL" ile "istanbul" eşleşir.
Daha fazlası
- Menü: menü başlıklarını çevirmek.
- Arama: Türkçe karakterlere duyarsız arama.
- Yapılandırma:
localebloğunun bütün anahtarları.