Creating a localized MonoMac application (both strings and XIB)

After I found exactly zero examples for the great MonoMac library (create OS X Mac applications in C# without the need to install Mono separately on a Mac) on how to do localization of Xcode Interface Builder XIB files, I found one discussion about that topic. With some help of the original poster Florian, I was able to bring up a solution that worked for me.

I’ve assembled an example project that you may download as a ZIP file.

While I found plenty of examples/postings on how to do localization of pure strings (through the „Localizable.strings“ files), I found none on how to do it with whole XIB files.

Basically the folder structure looks like this:

The example contains a localization for German („DE“) and a localization for Englisch (the default, „EN“). Whereas MonoMac places the XIB files (like „MainMenu.xib“ and „MainWindow.xib“) inside the root of the application, I did not manage to make the application multilingual when keeping the structure this way.

Instead, I moved all XIB files that need to be localized/translated into the „en.lproj“ folder. I also placed the strings file „Localizable.strings“ into this folder. Since I need the files for German, too, I copied them to the „de.lproj“ folder, too. Next, I double clicked the XIB files in the German folder, which launched them inside Interface Builder. I then translated them graphically inside Interface Builder, saved, switched back to Mono and was done.

After compiling the application and starting, it showed my correctly a German UI (since my Mac has the German language active) for the main menu, the elements on the main window and also the label was correctly set to the text read from the German „Localizable.strings“ file.

Things to keep in mind:

  • The „Localizable.strings“ files have to be set to the Build Type „Content“.
  • All XIB files (i.e. the English and non-English files) have to be set to the Build Type „InterfaceDefinition“.
  • I first got success after I did a „Clean“ command (right-click on the root node in the Solution Explorer tree) and then a Rebuild command. My guess is that the automatically-generated Xcode project may have interfered somewhat. Also I quit Xcode completely before doing the cleanup.
  • I am unaware if the steps I did are usually and best-practice, since it involves in copying/duplicating whole XIB files which seems to be very error-prone to me.

I’m really happy for any feedback you have for me!

Adding Outlets for MonoTouch with Apple Xcode 4

Searching over and over again, I found no way of generating those „outlets“ in Xcode 4’s new Interface Builder in conjunction with MonoTouch.

Right before getting nuts, I found this document that has the solution to it:

Transitioning from Xcode 3 to Xcode 4
A guide for MonoTouch users

The chapter named „Adding Outlets and Actions“ contains the solution to it. Basically you have to:

  1. Select a control (e.g. a button) in the designer
  2. Hold down the Control key on the keyboard
  3. Drag the control from the designer into the source corresponding code right below the @interface definition

Then, after saving the file in Xcode 4, MonoTouch shows the new outlets as properties in the .designer file.

Update 2011-10-07:

There is also a new documentation regarding the Transition from Xamarin.