benim dilli programında, böyle, dil dosyası oluşturma sırasında bir dil veritabanından dil dizeleri getir:alın dil dizeleri yinelemeli
SELECT [key], translation FROM language WHERE [email protected]
UNION
SELECT [key],translation FROM language WHERE lang='EN'
AND [key] NOT IN(SELECT [key] FROM language WHERE [email protected])
Gördüğünüz gibi, İngilizce tüm diller için son çare olduğunu, should Eksik çeviri dizeleriyle karşılaşıyoruz.
tablo düzenidir:
[lang] VARCHAR(5)
[key] VARCHAR(100)
[translation] VARCHAR(MAX)
Şimdi "İngilizce" hariç her dil tanımlanmış bir yedek dil olan bir dil ağacı, olması mantıklıdır. Böyle bir şey:
English
|- English (UK)
|- German
| |- German (Switzerland)
| |- German (Austria)
|- French
| |- French (Canada)
| |- Italian
| |- Portuguese
| | |- Portuguese (Brazil)
|- Russian
| |- Czech
Bu şekilde, dil dizeleri (henüz) İtalyanca mevcut şimdilik Fransızcadan dil dizeleri ile değiştirilebilir değil, İngilizce daha İtalyan kullanıcılara daha okunaklı olabilir [kaynak belirtilmeli. Ayrıca, Almanca (İsviçre) sadece Almanca'dan gerçekten farklı olan dizeleri içermeli ve tüm dizilerin tam bir kopyası olmak zorunda kalmayacaktır.
Ancak dil dizelerini veritabanından getirirken, bunu nasıl yaparım?
Ben https://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx anlamaya çalıştık, ancak kısıtlamayı resursive parçası haline "sadece sonuç kümesinin henüz parçası olan anahtarları getir" nasıl ekleneceğini ben alamadım:
WITH MyCTE ([key], translation)
AS
(
SELECT [key],translation FROM language l1
WHERE lang = @lang
UNION ALL
SELECT [key],translation FROM language l2
WHERE lang = (SELECT translation FROM language l3 WHERE lang = @lang AND [key] = 'PARENTLANGUAGE')
AND [key] NOT IN l1
)
SELECT *
FROM MyCTE
Örneği Tablo DDT:
CREATE TABLE language(
lang VARCHAR(5) NOT NULL,
[key] VARCHAR(100) NOT NULL,
[translation] VARCHAR(MAX) NOT NULL
)
Örnek Veri:için
INSERT INTO language([lang],[key],[translation]) ('EN','YES','Yes');
INSERT INTO language([lang],[key],[translation]) ('EN','NO','No');
INSERT INTO language([lang],[key],[translation]) ('EN','OK','OK');
INSERT INTO language([lang],[key],[translation]) ('EN-US','NO','Nope');
INSERT INTO language([lang],[key],[translation]) ('DE','YES','Ja');
INSERT INTO language([lang],[key],[translation]) ('DE','NO','Nein');
INSERT INTO language([lang],[key],[translation]) ('EN','JANUARY','January');
INSERT INTO language([lang],[key],[translation]) ('DE','JANUARY','Januar');
INSERT INTO language([lang],[key],[translation]) ('DE-AT','JANUARY','Jänner');
INSERT INTO language([lang],[key],[translation]) ('EN-US','PARENTLANGUAGE','EN');
INSERT INTO language([lang],[key],[translation]) ('DE','PARENTLANGUAGE','EN');
INSERT INTO language([lang],[key],[translation]) ('DE-AT','PARENTLANGUAGE','DE');
Beklenen sonuç:
[key] translation
-------------------
YES Ja
NO Nein
OK OK
JANUARY Jänner
Lütfen örnek veriniz http://sqlfiddle.com – lad2025
Çocuk diliniz ebeveyninizle nasıl ilişkilendirilir? –
@ AllanS.Hansen Şu an itibariyle bağlantı yok. Bunun için bir çeviri dizesi ('[key] = 'PARENTLANGUAGE' ') kullanmayı planlıyorum, ancak diğer öneriler için açıktayım. – Alexander