Google Analytics

Readability

BuySellAds.com

Our DNA is written in Objective-C
Jump

Linguan

Linguan greatly simplifies localizing your Mac and iOS apps. It gives you an intelligent editor for all strings files contained in your Xcode project.

You get warned about duplicate tokens or missing translations. Then you can export and e-mail all missing tokens for a specific language to your translator, who can also use Linguan for filling in the translations or use his text editor of choice.

When you get the translators results back Linguan automatically merges the results into your project, even if the tokens originated from multiple different strings files.

Linguan is the most fun way to clean up your translations.

Basic Workflow

  1. Open an Xcode project file
  2. Select a strings file in the navigation tree
  3. Start translating strings in the table

Powerful Tools

Inspector Window

You can also open the inspector window to edit strings. Here you have more space which helps when editing multi-line strings. The inspector window also provides interesting statis- tics about the selected files.

Validating a Project

Linguan checks your project for missing translations and duplicate strings. A validations hap- pens right after you open a project or after invoking the validation manually (e.g. from the tool bar). Warnings are displayed in a special area on the bottom of the main window. Double click warnings to jump directly to the corresponding token.

Scan Sources

Linguan can scan a project’s source files and adds all string tokens used in NSLocalizedString macros which are not already contained within a strings file. All newly added tokens are displayed in the message area at the bottom of the window.

Working With Translators

1) Export Tokens

You can choose to export a source language. E.g. if your translator translates from English to German, you would choose English as source language and German as target language. Select which strings a translator should get. “Missing Tokens” would be a good option.
A strings file containing only strings with missing translation is exported.

2) Let the translator do the work

Send the strings file to the translator. A translator can either edit the file directly using a text editor or import it into Linguan for translating it with style.

3) Import the translated strings file

After the translator has sent you the translated strings file you just import it into your projects and all missing translations will be added in the right place.

App Categories:

32 Comments »

  1. When did the Price jump to $9.99. I had the impression the $4.99 would be available for a short time to come.

  2. Hi,

    unfortunately the tool doesn’t work for me at all. When I import a project it only shows the original language and no translation column. Even though, it tells me, that there are more translations set up in the project.

    It looks like the project tree is broken. It shows me the complete path on my hard drive instead of a relative path, like it is on the screencast.

    I don’t get any errors or warnings whatsoever, it just doesn’t work. :-/ So it’s the opposite of “painless localization” :-/

    I have no idea how I can reach your support but this page is referenced as support site on the Mac App Store. Would be nice to have at least an e-mail address where one could send screenshots and stuff and where support questions are not public!

    Regards,
    Thomas

  3. Excellent product!

    Just 1 suggestion: import and export in excel compatible format. I gave to my translator guy the file string… but he destroy it… so I fix it and import it.

    In stead, if I can send an xls or csv, is easier to “non developer” people to manage.

    Any way… It is a nice product that makes me save a lot of time!

    Thanks!
    Facundo

  4. Hi,

    nice Tool, helps saving a lot of time.
    In our project we have an issue with Linguan, so this is a suggestion for a later version.

    Sometimes we use “Format specifiers” like “Mailcount: %i” in our translations or
    Complete sentences like “Hello!\r\nThis is a greetings mail.”

    But Linguan is malforming “\r\n” to “\\r\\n” and sometimes “%i” to “%1 $i”.

    Search/Replace helps out here. But it would be nice to use format specifiers in translations, too.

    Another suggestions is, replacing the NSLocalizedStrings inside the project on demand, if the “Key” changed.

    The developer can ‘inline’ create strings like “Internal Server error: SSH must be turned on”.
    And if Linguan were able to change this later to a key like “mail_ssh” would be fine.

    Greetings

    Jack Pearse

    • Where do you see this “malforming”? Please provide me with a stripped down xcodeproj that demonstrates the issue.

    • Hi,

      Linguan is a very handy tool – thanks for putting it together!

      I’d like to second Jack’s suggestion for being able to modify the NSLocalizedString in the project if the key is changed. I have run into several cases where this would be desirable.

      A couple of other things I’ve noticed that would be nice to have:
      - The search filter box only seems to work when on the “All” filter. It would be good if it could filter also on missing or warnings.

      - It would be nice to be able to delete a translation that no longer exists

      - It would be nice if it could scan and determine if a particular localized string is no longer present in the source. i.e.: code has changed and some strings are no longer required.

      Thanks!

      Sean.

  5. Hi!

    Another suggestion:

    Last friday I spent 4 hours creating all the string.xml for android eclipse… just coping and pasting from Localized.string….

    If you create some export to android should be great!

    Regards

  6. Hi!

    Actually I was trying to translate a project using Linguan for the first time!

    Thank you so much for this tool! It’s like a compiler upon the compiler. The warnings helped me getting rid of doubled tokens. And much better, if you append functionality to your apps, new string will appear. Extracting the new ones so that the translators don’t have to deal with double translations is so easy now.

    Linguan knows different kind of localized strings, i.e. NSLocalizedString() or NSLocalizedStringWithDefaultValue(). Now I can easily extract Strings into class relevant string files (i.e. localized error messages, which must not be translated all the time, because they are bundled with a class or library)

    I am actually beginning translating and Linguan just saved me so much time.
    This App is a must have if you are xcode developer and trying translating stuff.

    And support is fast and friendly. Thank you so much!

    Regards

    Jack

    P.S.
    I like the Application Icon ;-)

  7. So I’m not sure if I’m missing something, but when I modify a string name, it doesn’t modify the underlying call to NSLocalizedString. This is basically the main reason I bought the product – any chance that is an option or could be?

    • Linguan does not modify your project file or source code. It is meant as an editor for the strings files.

      To change all tokens in your code you can simply use the search/replace function in Xcode.

    • Max,

      I am trying to elaborate Drops’ answer a bit more:

      if you have NSString *xHello = NSLocalizedString(@”Hello World!”);
      in one of your source files, then Linguan will find that and add an entry to localized.strings (which you need to create in your project and assign languages to it).

      In Linguan you can then easily translate all these entries. At runtime your app will then look into “localized.strings” for the current language. In turn xHello will hold a translated version of “Hello World”.

      Linguan only writes those .strings files back to your project. It does not modify .m or .h files!

      • Oh I get that, I just don’t like it. :) The flow I want (and I realize it’s not everybody who wants this) is that it scans the source, creates the localized strings file(s). Then I edit the generated files (mostly key names), and choose to write them back to the .m. A plugin system of some sort or an option would be pretty awesome. I can write the regexp scanner stuff myself, but ugh.

        • If it writes back to the .m files, how should the different languages be distinguished then?

          • Ah, I realize I didn’t describe it well. I want NSLocalizedString(@”I was a lazy developer”, “My hint”) to become NSLocalizedStringWithDefault(@”My.Smart.Key”,@”My hint”,@”My Default”) (I think that order is right).

            Point being I want to use the Linguan interface to manipulate all the keys names at once rather than trying to do that in code. (Might also be nice to be able to edit the string file name at the same time)

          • Personally I found it to be difficult to separate keys and default values. We have done that in one larger iOS app, but it either ended up that key==default or that you could hardly determine what meaning a specific key was meant to have (without looking at the place in source).

            But as always, preferences are personal, so maybe Drops puts this on his list as an option for a future version …

  8. I like Linguan very much!

    Have you ever thought about integrating ibtool in a way, so that Linguan would create .string files for selected XIB files (and create the translated XIB files vice versa)?

    Having that in Linguan (like scanning for NSLocalizedString macros) would make life even easier :-)

  9. Thanks for saving me loads of time! A request however.
    It would be great if any edits of comments would also update the original comments in the .h or .m file.
    So in the .strings file I add “WITH EDIT” using Linguan:
    /* Settings View: choose a color setting WITH EDIT */
    “Color” = “Color”;

    And it also updates my original definition:
    #define COLOR_LOCAL NSLocalizedString(@”Color”, @”Settings View: choose a color setting WITH EDIT”)

    • Thank you for your feedback. We’ll take it under advisement. Though it is rather unlikely that we are going to touch your source code, that’s simply too dangerous and much effort.

  10. Feature Request/Bug Fix: save the changes I make to the toolbar (I always add the Save All button, but it disappears when I restart the app).

  11. Hi Oliver,

    Question: How can I use Linguan to work with a sub bundle? Like the Settings bundle or other sub bundle to the main bundle?

    Thank you for your help.

    Regards,

    Enrique

    • Linguan does not go into bundles yet. Generally you should build bundles with a bundle target, because then the resources get properly preprocessed and Linguan can see them.

      • Ah, I was just about to ask this myself, as adding settings would certainly help.

        OK I’ll see if I can do that.

        Other than that, Linguan is working great for me- well done

      • A guide to how best to do this for the Settings bundle would be much appreciated, as it is something most users of Linguan will need to do.

        Integrating this within Linguan would obviously be the optimum user experience.

Leave a Comment

You must be logged in to post a comment.