Yerelleştirilmiş bir film şeridinin dizelerini güncellemek mümkün mü?


226

Uygulamamın bir kısmını bir base.lproj film şeridi ve bunun için 3 dize dosyası oluşturarak yerelleştirdim. Bir ay önceydi ve bundan sonra uygulamaya yeni görünüm denetleyicisi ekledim, ancak bu denetleyicinin düğmeleri ve etiketleri dize dosyalarında görünmüyor

Bu 3 film şeridi ekli dize dosyalarını güncellemek mümkün mü yoksa NSLocalizableString ve Localizable.strings kullanarak programlı yeni dizgi çevirileri eklemeliyim?


Yanıtlar:


264

İki seçenek vardır:

seçenek 1

Xcode, dosyayı bir [Interface Builder Cocoa Touch Storyboard] dosya türüne veya [Localizable Strings] dosya türüne dönüştürerek dosyayı yeniden yükleyebilir .

  1. Proje Gezgini'nden temel film şeridi dosyanızı seçin
  2. Dosya Denetçisinde Yerelleştirme bölümünü bulun
  3. Dosyanız şu anda [Yerelleştirilebilir Dizeler] ise, [Interface Builder Cocoa Touch Storyboard] olarak değiştirin veya tersini yapın.
  4. Xcode, eski yerelleştirme çabalarınızı korurken film şeridinizi geçerli sürüme dönüştürmüş olmalıdır. İsterseniz dosyayı orijinal dosya türüne geri döndürebilirsiniz.

seçenek 2

Film şeridinizdeki dizeleri çıkarmak için ibtool kullanın.

  1. Terminal uygulamasını açın

  2. Base.lproj dizininizi bulun

  3. Dizeleri ayıklamak için bu satırı kullanın:

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. İbtool dizeleri file_name.strings dosyasına çıkardıktan sonra, kopyalayıp orijinal .strings dosyanıza yapıştırabilirsiniz

Daha fazla bilgi için ziyaret edin: https://conyac.cc/business/columns/localization_guide_ios


1
Seçenek 1'i denedim, ancak dosya türünü [Yerelleştirilebilir Dizeler] 'den [Arayüz Oluşturucu Kakao Dokunmatik Storyboard] olarak değiştirmek her zaman Xcode 5.0.1 çökmesine neden olur. Bunun nedeni - yukarıdaki olasılıkların farkında olmadığımdan - storyboard yerelleştirme dosyalarını daha önce el ile düzenledim olabilir.
Reinhard Männer

16
Seçenek 1 çalışır. Ama "Yerelleştirilebilir .." den "arayüz ..." ve sonra tekrar geri değiştirmek gerekir!
João Nunes

3
Seçenek 1, XCode 6.0.1 kullanarak benim için çalışmıyor. .Strings dosyamı .interfacebuilder biçimine dönüştürmeye çalışırken XCode, dosyaların dönüştürülüp dönüştürülmeyeceğini sorar. Dosyalar dosya sisteminde oluşturulur, ancak dize dosyaları hala kalır ve eski değerleri içerir.
Zıplayan Bit

53
Benim için Seçenek 1, zaten çevrilmiş tüm dizeleri İngilizce olanlarla değiştirdi. Çeviriyi bir kez daha eklemek zorunda kaldım.
Mihail Velikov

5
Seçenek 1, Xcode 7'de çok kararsız görünüyor. Bazen işe yarıyor, bazen çalışmıyor. Bazen rastgele çevrilmiş dizelerimin bir kısmını tekrar İngilizce sürümlerle değiştirir.
Adam Johns

76

BartyCrouch'a göz atın , sorununuzu mükemmel bir şekilde çözer. Ayrıca açık kaynak kodludur , aktif olarak bakımı yapılmaktadır ve projenize kolayca kurulabilir ve entegre edilebilir.


BartyCrouch'u Homebrew ile kurun :

brew install bartycrouch

Alternatif olarak, Mint ile kurun :

mint install Flinesoft/BartyCrouch

Storyboards / XIBs Strings dosyalarınızı kademeli olarak güncelleyin :

$ bartycrouch update

Bu tam olarak aradığınızı yapacak.


Amacıyla tutmak için storyboardlar / XIBs Strings dosyalarını zamanla güncellenen ederim bir yapı komut dosyası (bir yapı komut dosyası eklemek için nasıl talimatlar eklemenizi öneririz burada ):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Storyboards / XIBs Strings dosyalarınızı artımlı olarak güncellemeye ek olarak , Localizable.stringsdosyalarınızın kodda yeni eklenen anahtarlarla güncellenmesiniNSLocalizedString ve yinelenen anahtarlar veya boş değerler için uyarılar göstermesini sağlar.

Ek bilgi için GitHub'daki BartyCrouch'a veya bu ayrıntılı makaleye göz atmayı unutmayın .


1
Vaov! Bu araç sadece şaşırtıcı. Bu daha fazla oy istiyor!
ph1lb4

1
güzel bir araç - artık manuel etiketleme / yeni etiket metinlerinin * .strings dosyalarına yapıştırılması (... ve daha önce olduğu gibi yeni bir etiketin çevirisini unutmak) ... Çok teşekkürler!
iKK

OBJC projeleri için benzer bir kapsül var mı?
rickrvo

2
Aradığımız cevap bu. Bu kabul edilen cevap olmalı.
Juanjo

3
Bu soru sorulduğundan 6 yıl sonra neden anlamıyorum ve bu yamalı çözüm hala Xcode'da çalışmak için gerekli. Apple bunun üzerinde çalışmış olmalı.
huggie

57

Yerelleştirme dosyanıza manuel olarak bir anahtar ekleyebilirsiniz. Anahtar nesneyi film şeridi düzenleyicisinde seçerek bulabilirsiniz. Object-IDKimlik denetçisine bir göz atalım . Bu şey gibi"nwc-b2-19c"

Yerelleştirme güncellemenizde veya çeviri ekleyin. Örneğin :

"nwc-b2-19c.title" = "Translated title";

8
daha az riskli bir yaklaşım olduğunu düşünüyorum
Nicolas Manzini

Ancak bazı Object-ID .string dosyasında gösterilmez. Çünkü bağlı değiller. O zaman ne yapabilirim?
Mihir Oza

sadece otomatik oluşturulan kimlik değil, bir ad ile seçmenin bir yolu var mı?
cocoseis

Bir UILabel için: "YeB-ap-Wkw.text" = "Etiketlerim metni";
ioopl

30

Bu herkes için değil, terminalde ek bir araç gerektirmez ve küçük manuel değişiklikler için kolaydır. (İşleminizi otomatikleştirmek istediğinizde bunu dikkate almayın.)

Adım 0: Film şeridi dil kurulumu

  • Base (İngilizce metinlerle)
  • İngilizce (temel dosya İngilizce olduğundan yerelleştirilebilir dizeler dosyası mevcut değil)
  • diğer diller (yerelleştirilebilir dize dosyaları)

temel yapılandırma

Bu adım yalnızca bir kez yapılır.

Şimdi film şeridine bir şey eklediğimde aşağıdakileri yapıyorum

1.Adım: İngilizce yerelleştirilebilir dizeler dosyasını ekleyin

İngilizce ekle

İngilizce satır öğesini işaretlemeniz yeterlidir.

Bu, tüm satırlarla tamamen yeni bir İngilizce yerelleştirilebilir dizeler dosyası oluşturur

2.Adım: Yeni satır öğelerini diğer dil dosyalarına kopyalayın

ve tercüme et

3.Adım: İngilizce işaretini kaldırın, karşılık gelen yerelleştirilebilir dizeler dosyasını kaldırın

yalnızca yeni satır öğelerini almak için dosyaya ihtiyaç vardı

Bu kolay ve hızlı bir işlemdir, her şey film şeridi düzenleyicisinde yapılır

Düzenle:

Bu işlem küçük film şeridi ile çok iyi çalışır. Örneğin, sekme tabanlı bir projem var ve her sekme için bir film şeridim var.

Öğreticileri bulmak için "storyboard referansı" araması yapın.

İyi örnek: Xcode'daki film şeridi referansı, nerede kullanmalıyız?

Bu nedenle, her küçük film şeridinin yerelleştirmek için yalnızca birkaç dizesi vardır.


harika! Ayrıca, silinen öğelerin nasıl kaldırılacağı hakkında bir fikir buldunuz mu?
Tobe

@Tobe Storyboard'unuzu yukarıda önerdiğim gibi bölerseniz, artık kullanılmayan dizeleri tespit etmek gerçekten kolaydır.
Gerd Castan

15

Son olarak, benim çözümüm (ilkel ama etkili) önceki çevirileri kopyalayıp Yerelleştirme dil kutusunun işaretini kaldırarak ve işaretleyerek oluşturulan yeni bir dosyaya yapıştırdı.

Bu, yalnızca bir veya iki metni değiştirmeniz gerektiğinde benimki gibi bazı durumlarda yararlı olacaktır.


Bu kimlik ve her zaman korunur mu? Bir test yaptım ve işe yarıyor gibi göründü, ancak kimlik değiştiğinde bir felaket olabilir.
ullstrm

Sanırım bunu birçok kez sorunsuz bir şekilde yaptım.
jpl850

1
Kullanıcı arabirimi öğelerini bıraktığınızda kimlikler atanır. Film şeridi tarafından atandıkları için yerelleştirmeden bağımsızdırlar. Yani kimlikler üzerinde hiçbir etkisi olmayacak.
Aralık'ta iBug

Açıklama için teşekkürler iBug =)
jpl850

14

En iyi yolu yerleşik ihracat / ithalat Yerelleştirmeler kullanarak olduğunu düşünüyorum:

  1. Proje Gezgini'nde proje klasörünü seçin
  2. Editör> Yerelleştirme İçin Dışa Aktar'ı seçin,
  3. Yerlerine bırakılan tüm çeviriler ve XCode, kaçırılan dizeleri otomatik olarak ekler. Ayrıca, içe aktarmadan önce XLIFF Editör'de .xliff'i düzenleyebilirsiniz (örneğin, çevrimiçi - http://xliff.brightec.co.uk ) ve sonra bunu XCode'da yapmanız gerekmez.
  4. ardından Editör> Yerelleştirmeleri İçe Aktar ve kaydedilmiş .xliff dosyasını seçin.

PS XLIFF Editör'de düzenlemek istemiyorsanız ve 3. adımı atladıysanız, XCode yeni dizeleri kaydedemedi. Bu durumda .xliff'i XLIFF Editor'da açın, değişiklik yapmadan yeniden kaydedin ve yeni dosyayı içe aktarın.


1
+1 Yerelleştirme ile çalışmanın kolay ve doğru yolu. Ayrıca Apple
Jurasic

1
Xcode 7.3.1 kullanarak, zaten yerelleştirilmiş bir örnek projede, bir etiketi ("metin" den "temel metin" e) değiştirdim ve yeni bir etiket ekledim. Yerelleştirme için dışa aktardım, .xliff dosyasına (değişiklik olmadan) dokundum ve tekrar içe aktardım. Main.strings dosyasında, değiştirilen etiket için yorum satırı güncellendi /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, ancak Main.strings dosyasında yeni etiket OLUŞTURULMADI. Sonra yeni etiket için bir çeviri eklemek için .xliff dosyasını düzenledim. Tekrar ithal ettim. Yeni etiket şimdi Main.strings dosyasına eklenir.
8'de duthen

+1 ama keşfettiğim bir hata var. Yeni öğeler eklerken dışa aktarılan bir dosyada değiller (duthen'ın dediği gibi). Ancak hemen ardından bir dışa aktarma yaptığımda (film şeridinde değişiklik yapılmadan), eklenen tüm öğeler şaşırtıcı bir şekilde dahil edilir. Bu yüzden iki kez ihracat yapın. İkincisi tüm yeni unsurları içerecektir. Teşekkürler Apple!
Viktor Kucera

6

Film şeridinizi tıkladığınızda, örneğin Main.storyboard ... Sağ tarafta yerelleştirme menüsünü görebilirsiniz (ekli resme bakın). Bir dilin işaretini kaldırıp tekrar kontrol ederseniz, dosya tekrar oluşturulur. Bu yüzden genellikle içeriği kopyalarım, dosyayı tekrar oluştururum ve kopyaladığım ve zaten çevrilmiş olan içeriği yapıştırırım.

Sözlüğü güncellemek için kullandığım yol budur.

resim açıklamasını buraya girin


Git kullanıyorsanız Xcode 10 ile farkları vurgular!
Ricardo Ruiz Romero

Evet, mümkün ... şimdi dosyam bu tarihten daha büyük ve yeniden oluşturduktan sonra depo sürümüyle birleştiriyorum.
J. Fdez

5

Orada bir sürü ipi olan kocaman bir storyboard'um var. İki dil İngilizce ve başka bir arapça temel. Görev, film şeridine bazı alanlar ve etiketler eklemek ve herhangi bir komut dosyası ve NSLocalizableStrings olmadan yerelleştirme eklemekti.

Sonraki adımda bana yardımcı oldu:

İlk olarak : Beklenmedik değişiklikleri önlemek için git'inizin olduğundan emin olun.

  1. Xcode ve basında ekrana hedef git Editor-> Export For Localization.... Ar.xliff dosyasını bir yere kaydedin .
  2. XLIFF Edtior'u indirin .
  3. Ar.xliff dosyasını açın ve değişiklik yapın.
  4. Bu dosyayı xcode'a aktarın. Bitti! Film şeridi dizeleri dosyasını güncellediniz.

Bunun çalışması için önce Xcode proje düzenleyicisinden projeyi veya hedefi seçin.
Chuck Boris

4

Orada bir uygulama Apple bir komut satırı aracı adında AppleGlot olduğunu destekler artan yerelleştirme. Henüz denemedim, ama aradığınız araca benziyor (bir süre önce).


appleglotAracı nihai uygulama demetleri ile çalışıyor. Çeviri uygulamaları için tamamen farklı bir yaklaşımdır.
Flovdis

1
"Farklı bir yaklaşım" ile ilgili yanlış bir şey mi var, ya da düşüşe ne sebep oluyor?
tilo

Bu bağlantıda şimdi AppleGlot araması gerekiyor.
NSDeveloper

4

İşte film şeridi ve xib'lerden dizeleri ayıklamak ve bunları mevcut çevirilerle birleştirmek için bir komut dosyası .

Bir proje oluşturduğunuzda komut dosyasını otomatik olarak çalıştırmak için, komut dosyasını proje kök dizininize yerleştirin ve proje ayarlarınızdaki bir hedef oluşturma aşamalarına aşağıdaki satırı içeren bir Komut Dosyası Çalıştır aşaması ekleyin .

./mergegenstrings.py PathToSourceDir

Veya komut dosyasını Terminal'de manuel olarak çalıştırabilirsiniz.

Senaryo ibtoolTha Leang'ın cevabı olarak çalışır . Ayrıca kaynak kodunuzda genstringsişaretlenmiş dizeleri ayıklamak ve birleştirmek için de çalışır NSLocalizedString. Komut dosyası , bu yayında çalıştırıldıktan sonra dizeleri birleştiren bir komut dosyasına dayanır genstrings.


bunun nasıl kullanılacağı hakkında daha fazla bilgi verebilir misiniz?
user023

1
Bu özete bir yorum ekledim. Umarım yardımcı olur. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya

Teşekkür ederim, benim için mükemmel çalışıyor. Birisi izinlerle ilgili sorun
yaşıyorsa,

Bu script storyboard Main.strings dosyaları için iyi çalışıyor, ancak Xcode 7'deki Localizable.strings çevirilerimin üzerine yazılıyor gibi görünüyor
Adam Johns

3

En kolay ve çok daha az riskli yaklaşım, Nesne Kimliğini film şeridinden kopyalamanız ve aşağıdaki örnekte olduğu gibi yerelleştirilmiş dosyadaki anahtar için yeni bir anahtar eklemenizdir:

1: Bileşen için film şeridinden nesne kimliğini aşağıdaki gibi kopyalayın:

resim açıklamasını buraya girin

2: Aşağıdaki gibi yerelleştirilmiş dosyaya yeni anahtar ekleyin:

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

Not: Yalnızca birkaç bileşeni güncellemek istiyorsanız bu çok daha az riskli bir yaklaşımdır, aksi takdirde film şeridi için yerelleştirilmiş dosyayı yeniden oluşturabilirsiniz.


Cevabınız için teşekkürler!!!!!. Sormak istediğim bir soru var, Projelerimde, bazı etiketler, düğmeler için bir çıkış oluşturmadım ... Bu düğmeler ve etiketler için objectID kullanırsam yeterli mi?
Harikarthick K

3

Xlifftool bir Mac uygulaması olarak mevcuttur ve iyi çalışır. İnfo.plist, yerelleştirilebilir dizeler ve film şeridindeki tüm çevrilebilir dizeleri ve nesneleri gösterir.

Mac için buradan edinin: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Adım 1: Xcode'da, proje gezgininde proje klasörünüzü seçin. Ardından Yerelleştirme için Editör / Dışa Aktar ... seçeneğini belirleyin.

Çevrilebilir dizeleriniz, Xcode'da yerelleştirme için seçtiğiniz dilin altındaki bir xliff dosyasına dahil edilecektir.

Adım 2: Bu dosyayı xlifftool ile açın ve daha önce yapılmış olan çevirilerinizi tercüme edin veya güncelleyin.

3. Adım: Editör / İçe Aktarma Yerelleştirmeleri ile projenize geri yükleyin ...


MacOS için başka bir alternatif Loca Studio'dur . Xlifftool'a benzer şekilde, uygulama Xcode eylem Düzenleyicisi -> Yerelleştirme için Dışa Aktar'ın sonucunu açabilir. Bazı daha gelişmiş filtreleme ve arama özelliklerine ve ayrıca otomatik KG kontrollerine sahiptir. (tam açıklama: Ben baş geliştiriciyim).
guru_meditator

0

Bu, storyboard veya xib'den yerelleştirme dizesine yeni metni güncellemenin kolay yoludur

1- bu komut dosyasını kullanın http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- güncellemek istediğiniz yerelleştirme dizenizi seçin ve dil dizenizi "Yerelleştirme dizesi" nden "arayüz oluşturucu film şeridi" ne geçirin

3- geri dönün :)

Bitti.

resim açıklamasını buraya girin


Dosyayı Arayüz Oluşturucu Öykü Panosu olarak değiştirir, ancak 1 veya 2 saniye sonra tekrar Yerelleştirilebilir Dizelere geri döndürür ve yeni görünüm metni için Yerelleştirilebilir Dizelere ek olmaz
Mujahid Latif

Şu anda bu Pod'u kullanıyorum @MujahidLatif, bana gerçekten yararlı ve o irade olarak film şeridi yerelleştirmeleri ve Localization.String güncelleyebilir var github.com/Flinesoft/BartyCrouch
Fadi Abuzant

0

Seçenek 1
Xcode, dosyayı bir [Interface Builder Cocoa Touch Storyboard]dosya türüne veya dosya türüne dönüştürerek dosyayı yeniden yükleyebilir [Localizable Strings].

Proje Gezgini'nden temel film şeridi dosyanızı seçin Dosya Denetçisindeki Yerelleştirme bölümünü bulun . Dosyanız şu anda bir ise , veya olarak değiştirin . Xcode, eski yerelleştirme çabalarınızı korurken film şeridinizi geçerli sürüme dönüştürmüş olmalıdır. İsterseniz dosyayı orijinal dosya türüne geri döndürebilirsiniz.[Localizable Strings][Interface Builder Cocoa Touch Storyboard]

Seçenek 2 Film şeridinizdeki dizeleri çıkarmak için
kullanın ibtool.

Terminal uygulaması açın
sizin bulun Base.lprojdizin
dizeleri ayıklamak için bu satırı kullanın:

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

İbtool dizeleri ayıkladıktan sonra file_name.strings, kopyalayıp orijinal .stringsdosyanıza yapıştırabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.