Tarayıcının dil tercihine göre yönlendirme yapabilir miyim?
Kısa cevap
Evet, HTTP vService'te. Türkçe ve İngilizce için ürünle gelen hazır If the client prefers Turkish over English ve If the client prefers English over Turkish condition'ları doğrudan Conditional Backend Services bloğunda seçilir. Diğer diller için Client Language Preference condition'ı Accept-Language başlığını q-factor önceliğine göre değerlendirir. Kullanıcıyı dil sürümüne ait bir adrese göndermek için Location Redirection action'ı kullanılır. Accept-Language göndermeyen istemciler hiçbir dil condition'ını sağlamaz ve Default Backend Services'e gider.
Temel Bilgi
Tarayıcı, kullanıcının dil tercihlerini Accept-Language başlığında öncelik değerleriyle (q-factor, 0–1) bildirir; ör. de-DE,de;q=0.9,en;q=0.8 Almancanın önce, İngilizcenin sonra tercih edildiğini söyler. q=0 verilen dil kabul edilmez.
Sorun: Dil Sürümleri Farklı Sunucularda
Çok dilli bir sitenin dil sürümleri ayrı sunucularda çalışıyorsa kullanıcının tarayıcıda tercih ettiği dile göre doğru sunucuya gönderilmesi gerekir. Başlıkta düz metin aramak yanlış karar verdirir: en-US,tr;q=0.1 başlığında tr geçer, ancak istemcinin asıl tercihi İngilizcedir.
Çözüm: Üç Yöntem
Yöntem 1 ve Yöntem 2 isteği farklı Kurum Servislerine gönderir; Yöntem 3 sunucu seçmez, istemciyi dil sürümünün adresine yönlendirir.
| Durumunuz | Uygun yöntem |
|---|---|
| Yalnızca Türkçe / İngilizce ayrımı gerekiyor | Yöntem 1: Hazır condition'lar |
| Başka diller de var | Yöntem 2: Client Language Preference condition'ı |
Kullanıcıyı dil sürümünün adresine (ör. /de/) göndermek istiyorum | Yöntem 3: Location redirection |
Yöntem 1: Hazır Condition'lar (TR / EN) Önerilen
- Nasıl çalışır Ürünle gelen iki hazır condition, istemcinin Türkçeyi mi İngilizceyi mi daha çok tercih ettiğini q-factor'a göre belirler; ikisi birbirini dışlar. NOT hâlleri (If the client does NOT prefer Turkish over English vb.) de seçim listesindedir.
- Nerede açılır vService formu → + Conditional backend services → Select Conditions
- Gereksinim Hedef sunucuların Kurum Servisi olarak tanımlı olması
- vService tipi HTTP
Adım adım yapılandırma
Dil sürümlerinin sunucuları TR7'de henüz Kurum Servisi olarak tanımlı değilse önce eklenir; tanımlıysa bu adım atlanır. Load Balancer → Backend Services → Add ile her sunucu için Backend Service Name ve Address girilir ve bir Health Check profili seçilir. Ayrıntı: Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?
Load Balancer → Load Balancer vService List adımları izlenir ve HTTP vService açılır.
Default Backend Services tablosunun başlığındaki + Conditional backend services butonuna tıklanır (Conditional Backend Services).
Bloğun Select Conditions alanında If the client prefers Turkish over English seçilir; Kurum Servisi seçicisinde Türkçe sürümün Kurum Servisleri seçilir. İngilizce sürüm Default Backend Services'te değilse aynı şekilde If the client prefers English over Turkish ile ikinci bir blok eklenir.
Save butonuna tıklanır.
Doğrulama
Farklı Accept-Language değerleriyle istek gönderilir; yanıtı veren Kurum Servisi ayrıca HTTP Logs ekranında görülür (HTTP Loglarını Görüntüleme).
curl -s -H "Accept-Language: tr-TR,tr;q=0.9,en;q=0.8" http://203.0.113.10/tr önde → Türkçe Kurum Servisi · en önde → diğer blok ya da Default Backend ServicesYöntem 2: Client Language Preference Condition'ı
- Nasıl çalışırLanguage alanındaki dil, Languages to Compare alanındaki dillerle karşılaştırılır; istemcinin q-factor sıralamasında önde ise condition sağlanır.
q=0verilen diller elenir; bölgesel varyantlar (en-US,en-GB) temel dile dahildir. - Nerede açılırLoad Balancer → Conditions · vService formu → + Conditional backend services
- Gereksinim Hedef sunucuların Kurum Servisi olarak tanımlı olması; yalnızca istek aşaması
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add adımları izlenir; form Conditions · Nasıl eklenir? bölümünde anlatılır.
Condition Name girilir ve Criteria = Client Language Preference seçilir. Language alanında yönlendirilecek dil seçilir (ör. German (de)); varsayılan değer listenin ilk maddesi aa olduğundan dil mutlaka seçilir. Languages to Compare alanında sitenin sunduğu diğer diller seçilir (ör. English (en)). Bu alan boş bırakılırsa condition yalnızca "istemci bu dili kabul ediyor mu" sorusunu sorar.
Add butonuna tıklanır.
Sitenin sunduğu her dil için 1–3. adımlar aynı dil kümesiyle tekrarlanır (ör. English, karşılaştırma: German). Condition'lar aynı kümeyle tanımlanmazsa birbirini dışlamaz.
Yöntem 1'in 2–5. adımları uygulanır; her dil için ayrı bir blok eklenir ve bloğun Select Conditions alanında o dilin condition'ı seçilir.
Doğrulama
Almancayı önde tutan ve İngilizceyi önde tutan iki istek gönderilir.
curl -s -H "Accept-Language: de-DE,de;q=0.9,en;q=0.5" http://203.0.113.10/de önde → Almanca Kurum Servisi · en önde → İngilizce Kurum ServisiYöntem 3: Location Redirection
- Nasıl çalışır Condition'a uyan istek dil sürümünün adresine (ör.
https://www.example.com/de/) 3xx ile yönlendirilir; bu bir sunucu seçimi değildir, istemci yeni adrese yeniden istek gönderir. Ayrıntı: Belirli bir URL'yi başka bir URL'ye 301/302 ile nasıl yönlendiririm? - Nerede açılırLoad Balancer → Actions · vService formu → Details → Actions
- Gereksinim Bir condition (Location redirection condition'sız kaydedilirse hiç çalışmaz); hazır TR / EN condition'ları da seçilebilir
- vService tipi HTTP
Adım adım yapılandırma
Türkçe / İngilizce için hazır condition'lar kullanılır; diğer diller için Yöntem 2'nin 1–3. adımlarıyla condition oluşturulur.
Load Balancer → Actions → Add adımları izlenir.
Action Type = Location redirection seçilir; Redirect Location alanına dil sürümünün adresi girilir, Redirect Code alanında yönlendirme kodu (ör. 302) seçilir ve Conditions alanında dil condition'ı seçilir. Yönlendirme döngüsünü önlemek için aynı gruba, hedef yolla (ör. /de/) başlayan istekleri seçen bir Path condition'ının NOT hâli AND ile eklenir.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List adımları izlenip vService açılır ve formun üstündeki Details butonuna tıklanır.
Actions alanında oluşturulan action seçilir.
Save butonuna tıklanır.
Doğrulama
Almancayı önde tutan bir istek gönderilip yanıt başlıklarına bakılır.
curl -sI -H "Accept-Language: de" http://203.0.113.10/HTTP/1.1 302 · Location: https://www.example.com/de/Sık Yapılan Hatalar
Accept-Language'da düz metin aramak. HTTP header condition'ıylatraramak,en-US,tr;q=0.1gibi İngilizceyi tercih eden istekleri de yakalar; q-factor'ı dikkate alan Client Language Preference ya da hazır condition'lar kullanılır.- Languages to compare'ı boş bırakıp tercih karşılaştırması yapıldığını sanmak. Boşken condition yalnızca dilin kabul edilip edilmediğine bakar; ikinci sırada Almanca kabul eden İngilizce bir tarayıcı da eşleşir.
- Condition'ları farklı dil kümeleriyle kurmak. TR condition'ı EN ile, EN condition'ı TR ile karşılaştırılmalıdır; aksi hâlde aynı istek iki condition'ı birden sağlayabilir ve blok sırası sonucu belirler.
- Başlık göndermeyen istemcileri unutmak.
Accept-Languagegöndermeyen istemciler (ör. bazı botlar, API istemcileri) Default Backend Services'e gider; varsayılan dil sürümü Default Backend Services'e konur. - Bölgesel varyantlar için ayrı condition açmak.
enseçimien-USveen-GBisteklerini de kapsar.
Dokümantasyonda nasıl yapılır
