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
- Open an Xcode project file
- Select a strings file in the navigation tree
- 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: Drobnik.com Mac




When did the Price jump to $9.99. I had the impression the $4.99 would be available for a short time to come.
The price increase came with 1.0.1. Other developers kept telling us that it is too cheap and makes them wonder where the problem is. There is one competitor that charges $30, so Linguan is still very affordable compared to the hours of time it will save you.
$9.99 is the perfect price point for this app and better reflects the app’s quality than $4.99.
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
There is an e-mail button at the top of every page of this blog here. You can also directly file a bug report at https://bugs.cocoanetics.com for the “Linguan” project.
Sorry, for my harsh comment. Thanks for the link!
Greets,
Thomas
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
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.
It happens while scanning the code for strings. How can I provide you the examplecode. Should I use your e-mail?
Greetings
Jack
Yes, just email me.
Hi,
I sent you a mail to the account which was was linked at the top of your site. I hope this can help.
Thanks in advance.
Jack
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.
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
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
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 …
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
Xib support is coming soon
+100
Good to hear!
I’ve bought Linguan to help me managing a number of App projects and it took care of the .string files in a wonderful way.
And just like Olof, I’d like to get similar support for the .nib files.
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.
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).
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.