Apakah mungkin untuk memperbarui string storyboard lokal?

226

Saya melokalkan bagian dari aplikasi saya dengan membuat storyboard base.lproj dan 3 file string untuknya. Itu sebulan yang lalu dan setelah itu saya menambahkan controller tampilan baru ke aplikasi, tetapi tombol dan label controller ini tidak muncul dalam file string

Apakah mungkin untuk memperbarui file string 3 storyboard terlampir ini atau saya harus menambahkan terjemahan string baru secara terprogram dengan menggunakan NSLocalizableString dan Localizable.strings?

GeLB
sumber

Jawaban:

264

Ada dua opsi:

Pilihan 1

Xcode dapat "memuat kembali" file dengan mengonversi file tersebut menjadi tipe file [Interface Builder Cocoa Touch Storyboard] atau tipe file [Localizable Strings] .

  1. Pilih file papan cerita dasar Anda dari Project Navigator
  2. Temukan bagian Pelokalan di Pemeriksa File
  3. Jika file Anda saat ini adalah [String Lokal], ubah ke [Interface Builder Cocoa Touch Storyboard] atau sebaliknya.
  4. Xcode seharusnya mengkonversi storyboard Anda ke versi saat ini, sambil mempertahankan upaya lokalisasi lama Anda. Di sini Anda dapat mengubah file kembali ke jenis file asli jika Anda mau.

pilihan 2

Gunakan ibtool untuk mengekstrak string di storyboard Anda.

  1. Buka aplikasi Terminal

  2. Temukan direktori Base.lproj Anda

  3. Gunakan baris ini untuk mengekstrak string:

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

  4. Setelah ibtool mengekstrak string ke file_name.strings, Anda dapat menyalin dan menempelkannya ke file .strings Anda yang asli

Kunjungi untuk info lebih lanjut: https://conyac.cc/business/columns/localization_guide_ios

Tha Leang
sumber
1
Saya mencoba Opsi 1, tetapi mengubah jenis file dari [Localizable Strings] ke [Interface Builder Cocoa Touch Storyboard] hasilnya selalu macet di Xcode 5.0.1. Alasannya mungkin - karena saya tidak mengetahui kemungkinan di atas - saya mengedit file lokalisasi storyboard dengan tangan sebelumnya.
Reinhard Männer
16
Opsi 1 berfungsi. Tetapi Anda perlu mengubah dari "Lokalisasi .." ke "antarmuka ..." dan kemudian kembali lagi!
João Nunes
3
Opsi 1 tidak berfungsi untuk saya menggunakan XCode 6.0.1. Ketika mencoba untuk mengkonversi file .strings saya ke .interfacebuilder XCode bertanya apakah file harus dikonversi. File-file dibuat pada sistem file, namun file string masih tetap dan berisi nilai-nilai lama.
Bouncing Bit
53
Bagi saya Opsi 1 menggantikan semua string yang sudah diterjemahkan dengan yang bahasa Inggris. Saya harus menambahkan terjemahan sekali lagi.
Mihail Velikov
5
Opsi 1 tampaknya sangat tidak stabil di Xcode 7. Kadang-kadang berfungsi, kadang tidak. Kadang-kadang itu secara acak menggantikan beberapa string saya yang sudah diterjemahkan dengan versi bahasa Inggris lagi.
Adam Johns
76

Lihat BartyCrouch , itu menyelesaikan masalah Anda dengan sempurna. Ini juga open source , dipelihara secara aktif dan dapat dengan mudah diinstal dan terintegrasi dalam proyek Anda.


Instal BartyCrouch melalui Homebrew :

brew install bartycrouch

Atau, instal melalui Mint :

mint install Flinesoft/BartyCrouch

Perbarui file Storyboards / XIBs Strings Anda secara bertahap:

$ bartycrouch update

Ini akan melakukan apa yang Anda cari.


Dalam rangka untuk menjaga Storyboard Anda / XIBs Strings files diperbarui dari waktu ke waktu saya sangat merekomendasikan menambahkan membangun script (petunjuk tentang cara menambahkan membangun script di sini ):

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

Selain memperbarui file Storyboards / XIBs Strings Anda secara bertahap, ini juga akan memastikan Localizable.stringsfile Anda tetap diperbarui dengan kunci yang baru ditambahkan dalam kode menggunakan NSLocalizedStringdan menunjukkan peringatan untuk kunci duplikat atau nilai kosong.

Pastikan untuk memeriksa BartyCrouch di GitHub atau artikel terperinci ini untuk informasi tambahan.

Astaga
sumber
1
Wow! Alat ini sangat menakjubkan. Ini membutuhkan lebih banyak upvotes!
ph1lb4
1
alat yang bagus - tidak ada lagi penyalinan manual / menempelkan label-teks baru di file * .strings (... dan melupakan terjemahan label baru seperti sebelumnya) ... Terima kasih banyak!
iKK
apakah ada pod serupa untuk proyek OBJC?
rickrvo
2
Ini jawaban yang kami cari. Ini harus menjadi jawaban yang diterima.
Juanjo
3
Saya tidak mengerti mengapa setelah 6 tahun sejak pertanyaan ini ditanyakan dan solusi tambal sulam ini masih diperlukan untuk membuatnya bekerja di Xcode. Apple seharusnya sudah mengerjakan ini.
huggie
57

Anda dapat secara manual menambahkan kunci dalam file pelokalan Anda. Anda dapat menemukan objek utama dengan memilihnya di editor storyboard. Mari kita lihat di Object-IDinspektur identitas. Itu terlihat seperti"nwc-b2-19c"

Pada pembaruan pelokalan Anda atau tambahkan terjemahan. Sebagai contoh :

"nwc-b2-19c.title" = "Translated title";
Sébastien REMY
sumber
8
pikir itu pendekatan yang kurang berisiko
Nicolas Manzini
Tetapi beberapa Object-ID tidak ditampilkan dalam file .string. Karena mereka tidak terhubung. Jadi pada saat itu apa yang bisa saya lakukan?
Mihir Oza
apakah ada cara untuk memilihnya melalui nama dan bukan hanya id yang dihasilkan otomatis?
cocoseis
Untuk UILabel, ini: "YeB-ap-Wkw.text" = "Teks label saya";
ioopl
30

Yang ini bukan untuk semua orang, tetapi tidak memerlukan alat tambahan di terminal dan mudah untuk perubahan manual kecil. (Jangan pertimbangkan ini ketika Anda ingin mengotomatiskan proses Anda.)

Langkah 0: Pengaturan bahasa Storyboard

  • Base (dengan teks bahasa Inggris)
  • Bahasa Inggris (file string yang dapat dilokalisasi tidak ada karena file base adalah bahasa Inggris)
  • bahasa lain (file string yang dapat dilokalisasi)

konfigurasi dasar

Langkah ini dilakukan hanya sekali.

Sekarang ketika saya menambahkan sesuatu ke storyboard saya melakukan hal berikut

Langkah 1: tambahkan file string English localizable

Tambahkan bahasa Inggris

cukup tandai item baris bahasa Inggris.

Ini menciptakan file string bahasa Inggris yang benar-benar baru dilokalisasi dengan semua baris

Langkah 2: salin item baris baru ke file bahasa lainnya

dan terjemahkan

Langkah 3: hapus tanda Bahasa Inggris, hapus file string yang dapat dilokalisasi yang sesuai

file hanya diperlukan untuk mendapatkan item baris baru

Ini adalah proses yang mudah dan cepat, semuanya dilakukan di editor storyboard

Edit:

Proses ini bekerja sangat baik dengan storyboard kecil. Misalnya, saya memiliki proyek berbasis tab dan saya memiliki papan cerita untuk setiap tab.

Cari "referensi storyboard" untuk menemukan tutorial.

Contoh yang bagus: Referensi Storyboard dalam Xcode, di mana kita harus menggunakannya?

Jadi setiap storyboard kecil hanya memiliki beberapa string untuk dilokalisasi.

Gerd Castan
sumber
Bagus! Apakah Anda juga menemukan ide tentang cara menghapus elemen yang dihapus?
Tobe
@ Toro Jika Anda membagi storyboard Anda seperti yang saya sarankan di atas, sangat mudah untuk menemukan string yang tidak digunakan lagi.
Gerd Castan
15

Akhirnya, solusi saya adalah (belum sempurna tetapi efektif) salin terjemahan sebelumnya dan tempel di file baru yang dibuat dengan menghapus centang dan memeriksa kotak bahasa Lokalisasi.

Ini akan berguna dalam beberapa kasus seperti milik saya ketika Anda harus mengubah hanya satu atau dua teks.

jpl850
sumber
Apakah ini akan mempertahankan id dan sebagainya sepanjang waktu? Saya melakukan satu tes dan sepertinya berhasil, tetapi bisa menjadi bencana jika id berubah.
ullstrm
Saya pikir begitu, saya sudah sering melakukan ini tanpa masalah.
jpl850
1
ID diberikan saat Anda menjatuhkan elemen UI. Mereka tidak tergantung pada lokalisasi karena ditugaskan oleh storyboard. Jadi tidak akan ada efek pada ID.
iBug
Terima kasih iBug untuk penjelasannya =)
jpl850
14

Saya pikir cara terbaik adalah dengan menggunakan Pelokalan ekspor / impor bawaan:

  1. Di Project Navigator pilih folder proyek Anda
  2. Pilih Editor> Ekspor Untuk Pelokalan,
  3. Semua terjemahan tertinggal di tempatnya masing-masing dan XCode menambahkan string yang tidak terjawab secara otomatis. Selain itu, sebelum mengimpor, Anda dapat mengedit .xliff di XLIFF Editor (misalnya, online - http://xliff.brightec.co.uk ) dan kemudian Anda tidak perlu melakukan ini di XCode.
  4. lalu Editor> Impor Lokasi dan pilih file .xliff yang disimpan.

PS Jika Anda tidak ingin mengedit di XLIFF Editor dan telah melewatkan langkah 3, XCode tidak dapat menyimpan string baru. Dalam hal ini, buka .xliff di XLIFF Editor, simpan kembali tanpa perubahan dan impor file baru.

Igor
sumber
1
+1 Cara mudah dan tepat untuk bekerja dengan Lokalisasi. Selain itu, lebih disukai Apple
Jurasic
1
Menggunakan Xcode 7.3.1, dalam proyek sampel yang sudah dilokalkan, saya mengubah label (dari "teks" menjadi "teks dasar") dan saya menambahkan label baru. Saya mengekspor untuk pelokalan, menyentuh file .xliff (tanpa perubahan) dan mengimpornya lagi. Dalam file Main.strings, baris komentar untuk label yang diubah telah diperbarui /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, tetapi label baru TIDAK dibuat dalam file Main.strings. Kemudian saya mengedit file .xliff untuk menambahkan terjemahan untuk label baru. Saya mengimpornya lagi. Label baru sekarang dimasukkan dalam file Main.strings.
Duthen
+1 tetapi ada bug yang saya temukan. Saat menambahkan elemen baru, mereka tidak ada dalam file yang diekspor (seperti yang dikatakan duthen). Tetapi ketika saya melakukan ekspor tepat setelah (tanpa perubahan storyboard) semua elemen ditambahkan, mengejutkan, termasuk. Jadi lakukan ekspor dua kali. Yang kedua akan mencakup semua elemen baru. Terima kasih Apple!
Viktor Kucera
6

Ketika Anda mengklik di storyboard Anda, Main.storyboard misalnya ... Di sisi kanan Anda dapat melihat menu pelokalan (lihat gambar di atas). Jika Anda menghapus centang dan memeriksa lagi bahasa, file akan dihasilkan lagi. Jadi saya biasanya menyalin konten, saya menghasilkan file lagi dan kemudian saya tempel konten yang saya salin dan sudah diterjemahkan.

Ini adalah cara yang saya gunakan untuk memperbarui kamus.

masukkan deskripsi gambar di sini

J. Fdez
sumber
Dengan Xcode 10 jika Anda menggunakan git itu menyoroti perbedaan!
Ricardo Ruiz Romero
Ya, itu mungkin ... sekarang file saya lebih besar dari pada tanggal ini dan saya menggabungkannya dengan versi repositori setelah membuatnya lagi.
J. Fdez
5

Saya punya storyboard besar dengan banyak string di sana. Dua bahasa berbasis bahasa Inggris dan bahasa Arab lainnya. Tugasnya adalah menambahkan beberapa bidang dan label ke storyboard dan menambahkan lokalisasi untuk mereka tanpa skrip dan NSLocalizableStrings.

Untuk saya bantu selanjutnya:

Pertama : Pastikan, Anda memiliki git untuk mencegah perubahan yang tidak terduga.

  1. Buka layar target dalam xcode dan tekan Editor-> Export For Localization.... Simpan file ar.xliff di suatu tempat.
  2. Unduh XLIFF Edtior .
  3. Buka file ar.xliff dan buat perubahan.
  4. Impor file ini dalam xcode. Selesai! Anda telah memperbarui file string storyboard.
Nik Kov
sumber
Agar ini berfungsi, pertama pilih proyek atau target di editor proyek Xcode.
Chuck Boris
4

Ada aplikasi alat baris perintah dari Apple bernama AppleGlot yang mendukung pelokalan tambahan. Saya belum mencobanya, tetapi sepertinya alat yang Anda cari (beberapa waktu yang lalu).

tilo
sumber
The appleglotAlat ini bekerja sama dengan bundel aplikasi akhir. Ini adalah pendekatan yang sangat berbeda untuk aplikasi terjemahan.
Flovdis
1
Ada yang salah dengan "pendekatan berbeda", atau apa yang menyebabkan downvote?
tilo
Perlu mencari AppleGlot di tautan itu sekarang.
NSDeveloper
4

Ini skripnya untuk mengekstrak string dari storyboard dan xibs, dan menggabungkannya dengan terjemahan yang ada.

Untuk menjalankan skrip secara otomatis saat Anda membangun sebuah proyek, masukkan skrip ke direktori root proyek Anda, dan tambahkan fase Jalankan Skrip dengan baris berikut ke fase build target dalam pengaturan proyek Anda.

./mergegenstrings.py PathToSourceDir

Atau Anda dapat menjalankan skrip di Terminal secara manual saat Anda mau.

Script berjalan ibtoolsaat Tha Leang menjawab. Itu juga berjalan genstringsuntuk mengekstrak dan menggabungkan string yang ditandai dengan NSLocalizedStringdalam kode sumber Anda. Skrip ini didasarkan pada skrip dalam posting ini , yang menggabungkan string setelah dijalankangenstrings .

Yoichi Tagaya
sumber
dapatkah Anda memberikan informasi lebih lanjut tentang cara menggunakan ini?
user023
1
Saya menambahkan komentar ke intinya. Semoga ini bisa membantu. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya
Terima kasih, bekerja dengan baik untukku. Jika seseorang memiliki masalah dengan izin, ini dapat membantu: stackoverflow.com/questions/9850936/…
iCode
Skrip ini berfungsi dengan baik untuk file storyboard Main.strings, tetapi tampaknya menimpa terjemahan Localizable.strings saya di Xcode 7.
Adam Johns
3

Pendekatan termudah dan sangat berisiko adalah, cukup salin ID Obyek dari storyboard dan tambahkan kunci baru untuk kunci dalam file yang dilokalkan seperti contoh di bawah ini:

1: Salin id objek seperti di bawah ini dari storyboard untuk komponen:

masukkan deskripsi gambar di sini

2: Tambahkan kunci baru dalam file lokal seperti di bawah ini:

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

Catatan: Ini adalah pendekatan yang sangat tidak berisiko jika Anda ingin memperbarui hanya beberapa komponen jika tidak, Anda dapat membuat ulang file lokal untuk storyboard.

Alok
sumber
Terima kasih atas jawaban anda!!!!!. Saya punya pertanyaan untuk ditanyakan, dalam proyek saya, saya belum membuat outlet untuk beberapa label, tombol ... Jika saya menggunakan objectID untuk tombol dan label apakah cukup?
Harikarthick K
3

Xlifftool tersedia sebagai aplikasi Mac dan berfungsi dengan baik. Ini menunjukkan semua string dan objek yang dapat diterjemahkan dari info.plist, string yang dapat dilokalisasi, dan storyboard.

Dapatkan di sini untuk mac: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Langkah 1: di Xcode, pilih folder proyek Anda di navigator proyek. Kemudian pilih Editor / Ekspor untuk Pelokalan ...

String yang dapat diterjemahkan Anda akan dimasukkan dalam file xliff di bawah bahasa yang Anda pilih untuk pelokalan dalam Xcode.

Langkah 2: Buka file itu dengan xlifftool dan terjemahkan atau perbarui terjemahan Anda di sana yang telah dilakukan sebelumnya.

Langkah 3: Kemudian unggah kembali ke proyek Anda dengan Editor / Impor Lokasi ...

TM Lynch
sumber
Alternatif lain untuk macOS adalah Loca Studio . Mirip dengan Xlifftool, aplikasi ini dapat membuka hasil Editor tindakan Xcode -> Ekspor untuk Pelokalan. Ini memiliki beberapa fitur penyaringan dan pencarian yang lebih canggih, dan juga pemeriksaan QA otomatis. (pengungkapan penuh: Saya adalah pengembang utama).
guru_meditator
0

Ini adalah cara mudah saya untuk memperbarui teks baru dari storyboard atau xib ke string pelokalan

1- gunakan skrip ini http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- pilih string pelokalan Anda yang ingin Anda perbarui dan alihkan string bahasa Anda dari "String " ke "storyboard builder interface"

3- beralih kembali :)

Selesai

masukkan deskripsi gambar di sini

Fadi Abuzant
sumber
Itu memang mengubah file ke Interface Builder Storyboard tetapi kemudian kembali setelah 1 atau 2 detik mengembalikannya kembali ke String Lokalisasi dan tidak ada tambahan untuk String Lokalisasi untuk teks tampilan baru
Mujahid Latif
@MujahidLatif Saya menggunakan Pod ini sekarang, itu sangat berguna bagi saya dan dapat memperbarui lokalisasi storyboard dan Pelokalan.String seperti yang akan github.com/Flinesoft/BartyCrouch
Fadi Abuzant
0

Pilihan 1
Xcode dapat "memuat kembali" file dengan mengonversi file ke [Interface Builder Cocoa Touch Storyboard]tipe file atau [Localizable Strings]tipe file.

Pilih file storyboard dasar Anda dari Project Navigator Temukan bagian Pelokalan di Inspektur File . Jika file Anda saat ini a [Localizable Strings], ubah ke [Interface Builder Cocoa Touch Storyboard]atau sebaliknya.
Xcode seharusnya mengkonversi storyboard Anda ke versi saat ini, sambil mempertahankan upaya lokalisasi lama Anda. Di sini Anda dapat mengubah file kembali ke jenis file asli jika Anda mau.

Opsi 2
Gunakan ibtooluntuk mengekstrak string di storyboard Anda.

Buka aplikasi Terminal
Temukan Base.lprojdirektori Anda
Gunakan baris ini untuk mengekstrak string:

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

Setelah ibtool mengekstrak string file_name.strings, Anda dapat menyalin dan menempelkannya ke .stringsfile asli Anda .

Perangkat Lunak Amplework Pvt. Ltd.
sumber