Localizing an open source iOS app using Xcode. Using NSLocalizedString but localized text not showing up

Hi all,

Asking for help here and any suggestions and edit welcomed!

We are doing a project,trying to localized this open source iOS app here: Tic-Tac-Toe
Here are the questions/challenges we encounter:

-------------Using Xcode to build the project---------------

  1. We are trying to find the localizable strings inside the file. Is there any quick way to find all the translatable text all at once? I managed to find the text in "GameScene.swift":

  2. Followed the instruction in these two posts:
    ios-localization-tutorial
    iphone_app_localization
    created the Localizable.strings files for the base and another locale (in my case, I used zh-Hans)

  3. What I put inside each Localiable.strings file:

"Newborn" = "Newborn";

"Toddler" = "Toddler";

"Dummy" = "Dummy";

"Pupil" = "Pupil";

"Student" = "Student";

"B.S." = "B.S.";

"M.S." = "M.S.";

"PhD" = "PhD";

"Nikola Tesla" = "Nikola Tesla";

"UFO" = "UFO";

This is what I added for the base strings file.

"Newborn" = "新生儿";

"Toddler" = "幼儿";

"Dummy" = "小孩";

"Pupil" = "小学生";

"Student" = "中学生";

"B.S." = "大学生";

"M.S." = "硕士生";

"PhD" = "博士生";

"Nikola Tesla" = "尼古拉·特斯拉";

"UFO" = "外星人";

This is for zh-Hans strings file.

  1. Editing the source code where the translatable text occurs:
    The former source code is like this:

     enum DifficultyLevel: String {
     case one = "Newborn"
     case two = "Toddler"
     case three = "Dummy"
     case four = "Pupil"
     case five = "Student"
     case six = "B.S."
     case seven = "M.S."
     case eight = "PhD"
     case nine = "Nikola Tesla"
     case ufo = "UFO"}
    

Since it's not just simple text, instead, its inside an enum function, I did some google search in order to make it work.
---I changed it to the following based on some StackOverflow posts---
enum DifficultyLevel: String {

case one = "Newborn"

case two = "Toddler"

case three = "Dummy"

case four = "Pupil"

case five = "Student"

case six = "B.S."

case seven = "M.S."

case eight = "PhD"

case nine = "Nikola Tesla"

case ufo = "UFO"

func localizedString() -> String {

return NSLocalizedString( self.rawValue, comment: "")

}

static func getLevelFor(levelChoice:DifficultyLevel) -> String {

return levelChoice.localizedString()
      }
}

However, after doing this, and change the phone's language (in simulator), it still didn't show up....
Any help? Thanks a lot !!!

public func NSLocalizedString(_ key: String, tableName: String? = nil, bundle: Bundle = Bundle.main, value: String = "", comment: String) -> String

If you didn't pass tableName, it means your localizable strings should be putted into Localizable.strings. You said Localiable.strings, then it will be

NSLocalizedString("Newborn", tableName: "Localiable")
1 Like