We are in the process of building a reporting tool that would be mostly used by sales / marketing executives to monitor ROI.
This is not a consumer facing product rather a B2B product.
We are unable to decide whether to internationalize/localize the application or not.
Here are the two approaches we are thinking
1) Launch English only for now, but plan for localization in the future
Pros:
Make the product accessible for a larger market
Cons:
Long term maintainence cost (translation would be needed for every new screen-string pair)
Seems a bit like premature optimization
2) Dont internationalize at all, given that this is not a consumer facing product
Pros: Simplify development and maintainence over long term, not having to deal with I18N
Cons: Loose out on new audience who would like to use the software in their own language
What approach would you recommend?
Also HNers whose first language is not English,
1) Roughly what percentage of software you use has option available for your language
2) Do you prefer to use software in your language if there is an option available
3) Does not having your language impact productivity while using the software.
Thanks!
A couple years back sales convinced the CEO to internationalize for a European expansion... Starting with Turkish of all things.
It was a terrible waste of resources. We were still trying to find product market fit, and internationalization is a tricky, labor intensive problem. It's not just a matter of putting in hooks for internationalized strings in your code -- that's the easy part. It's setting up a great localization process that's the hard part. And even if you do a great job at building out that pipeline, it's a massive drag on the speed of developing new features. Every change needs to go through localization.
Don't do i18n until you have found product market fit, IMO.
I18n, not that important. I.e. likely your target audience is familiar with English. L10n, more likely to be needed for the ability to use a service.
As a European user, I need at least: (1) Have weeks count as starting on Mondays. (2) Have ISO-8601 / rfc3339 date and timestamps. (3) Decimal point and (4) 1000 number separators localized, time zone indicators, (5) UTF-8 support.
Localization means doing things like displaying days and times in a friendly way to the particular user? I.e. 24 hour clock vs 12 hour, order of month/day/year in dates. Whereas internationalization is total translation?
I've been using the two terms interchangeably.
And indeed we've noticed what you've noticed: Translation isn't that important. Businesses are using us even in places where English is not the predominant language. Localization however has been really important - it's a nice customer experience to display dates and times in a manner familiar to you.
Now let me add point 6: Proper RTL support in user-entered strings and data.
With possible exceptions for certain historical or scientific context, everyone should use ISO 8601. This means the week starts on Monday, you write the date as [YYYY]-[MM]-[DD], and using 24-hour clocks. Switching to 24-hour clocks was the hardest change for me, but I eventually got used to it.
I disagree with you that decimal mark and number separators should be localized. Resolution 10 of the 22nd CGPM [0] made declarations on both points, and their declarations have been supported by various standards bodies. Apparently ISO 80000-1:2009 is also in agreement, although I haven't been able to access the document to confirm. There is clear consensus that you should use a small space as the number separator. The decimal mark is a bit trickier since either comma or point are allowed. However, based on the following consideration from resolution 10: in Resolution 7 of the 9th General Conference, 1948, it is stated that "In numbers, the comma (French practice) or the dot (British practice) is used only to separate the integral part of numbers from the decimal part". One could argue that since we're using English we should just follow the British practice, so it's most reasonable to exclusively use the dot as the decimal mark and request that others stop using the wrong symbol. There's no good reason to support two symbols.
Unsure what you mean by time zone indicators. Could you clarify? On the subject of time zones though... Dealing with scheduling across multiple time zones with varying DST behavior and moving observers can be really tricky to get right.
People that don't use UTF-8 are just bad. It's fine to continue accepting input documents with other encodings, if only to make it easier for people to transition away from that. But don't encourage them by supporting saving or exporting documents with different encodings!
Your specific situation aside, if I was localizing an app for the region, Turkish would be one of my first picks (after German maybe), based purely on number of native speakers.
I used to work on mobile games and Turkish was always among the first few locales to be released.
But with that said, doing it up front even if it is less work than doing it later, is still way more work than not doing it at all. And if your app is in English your TAM is likely huge and you won't need to expand international for quite some time.
It's more than just localizing your app. You also need to do the same with your sales, support, and billing.
What do you do when you get a customer support request in a language your app supports but no one on your service team speaks? How do you get the customers in the other languages?
Also, what differences in laws regarding data protection / privacy / terms of service are you getting yourself into?
If you're charging a fee, do you need a bank account in the foreign country to charge the fee in local currency? If you do, what laws and regulations are you required to follow to get that bank account? What about tax? The US doesn't charge tax on services but many places do.
You can start by having multi language support on most user facing screens, as long as you make it clear that it’s mot full support and you only accept help requests in one or some of the languages.
Same with sales structures, making deals in english is doable, as long as the end user product supports their language.
Some people won’t go into internationalisation because it’s too costly to do it in full. I think it’s ok to do it peacemeal and along the way. Most user will prefer to have some vs nothing.
I agree with your point in general but would like to add a disclaimer. Local legal requirements if you target a specific non-domestic audience are mandatory. Sure you can skip that part and hope you fly under the radar but I wouldn't personally take that risk.
I think the bare minimum would be gettext style string marking, which is generally gettext("english string") in the source; other string marking techniques may provide a better localization, but this one is easier. Also, try to follow general guidelines for creating strings so they're likely to be localizable. Gettext's guidelines[1] are decent. You don't actually need to use gettext -- you can make a 1 line function or macro that just passes through the english text as is for now. Even if you don't mark strings, at least thinking about string guidelines will help for the future.
If you ever decide to come localize in the future, at least you won't have to markup all the strings, and hopefully you won't have done a lot of "string math" which is painful to unwind. You'll still have a big amount of work to test and fix any strings that were missed, but you'll be a lot farther ahead.
[1] https://www.gnu.org/software/gettext/manual/html_node/Prepar...
Now, what you should absolutely DO is make sure your system doesn't break with foreign names/data/locales
Locales to test: RTL locales (Arabic and Hebrew for the most part) and maybe Turkish (the infamous dotted capital I)
Names: Chinese, Japanese, Russian, Latin Extended (ñ, œ, ø, á, é, etc), even names in English can break stuff (O'Brian)
Dates: does it work with DD/MM/YY or YYYY-MM-DD and keeps consistent?
That being said you need to actively pursue international sales for this to work, and i18n software is only a part of this. If you aren't making the effort on the sales side it probably isn't worth it on the engineering side.
The app I built had no need for languages for the first 3-4 years. Then suddenly a foreign client comes in (ours is translated into Spanish, Portuguese, Russian and Chinese) and you've got a ton of code written.
If not, then do not worry about internationalization at all, and do just English. Validate your MVP first. At this stage, you’re trying to find people who have a pressing, immediate problem to solve - and even if some of them are not native English speakers, it shouldn’t be too much of a deterrent because your product will still be a godsend to them.
If you have already validated your product, or when you have done so, but it is not immediately clear what languages besides English you should pursue, then I would recommend still picking a second language to make sure that your codebase has basic, initial support for multiple languages. If you are not in a primarily anglophone country, or members of your founding team are native in another language, then pick that one (it’d be dangerous to pick a language you have no familiarity with, as a team, because high quality translators are hard to find, and translators who can work with your designers to address more subtle cultural details are close to impossible to find).
This won’t solve all your problems - for instance if you support English and Spanish out of the box, but a few years later you realize you need to support Hebrew, you’ll likely have work to do to support a right to left script. But at least your codebase will have initial support for more than one language, which will make the effort a little less insane.
The most basic version of how it works: Where you want your translated text, put a function, e.g. called “T” that takes a string as argument and returns a string. The function uses this argument (translation ID) to look up the actual translation in a map.
First and foremost i18n is not about extracting strings to make application translatable. Before you actually do that you should think what actual markets you will be targeting. Actually, even by your rough description of what your application will do, I can tell you that the major will be cultural fit. You may think that people tend to do business roughly the same way all other the world. And nothing could be farther from the truth.
Should you ever want to sell it outside US, you should think how to suite your target users' needs. And this is much more related to behaviors / workflows than to translation.
By the way, I don't care that much if something is translated, what I care most is how things like date, time and currency is presented. This is crucial; I can't comprehend dates like 4/11 quickly.
To answer your specific questions.
1) Frankly, I have no idea about percentage. Personally I tend to use English versions if that's possible as Polish translations tend to be horrible. Well, it is usually result of concatenating strings which does not allow for re-ordering the sentence, but still.
2) I already answered to some extent. I actually prefer everything to be in one language (be it my native Polish or English). Having part of UI in English and part translated is really irritating. And as I said, following local formats is much important.
3) This depends on your user base. In case of Poland, I believe financial / marketing people will use so many English terms that untranslated app would be easier to grasp. Should you follow local formats (or allow to change them in user preferences), that is.
I do not however localize them until its needed. Often working with translators and ensuring the quality of the localized application is not a huge priority in the beginning.
More fully, what's your customer acquisition pipeline like? How many people on your team are fluent in another language? If the answers are "we don't know yet" and "none, except I think one guy speaks a little X", then I18N is the last thing you should be thinking about. You have access to a plenty big market just working in English, figure out how you're going to get customers and what they want first. Establish yourself as a viable business. Get as many customers as you can with your English-only app.
Once you know how to get English-speaking customers and what they want, you can at least make a reasonable estimate on what will be required to get international customers. You should already have some English-speaking customers in any country worth targeting for a more directed sales effort. That'll at least give you a starting point for people to talk to to figure out how to service those customers better and what you might need to change to operate more effectively in that country. This may include actual good translations, units and date handling, any cultural differences, legal and tax compliance, accepting foreign currency for payments and how to handle that, etc.
Often the translation is done poorly, E.G. the word "open" has two different meanings when translated to German, depending on if it's used as a verb or adverb.
I especially used to hate the translation for git, because I couldn't understand it, since they even translated all the core concepts like "branch" into "Ast". It seems like it's better now, but there are still errors which are not translated, so the screentext is mixed German and English.
In the software I maintain I hate translations, because all the time project managers forget that I need the texts in two languages. Also there's never the perfect time to do the texts, since you almost always have to change the UI and all translations.
One tip: if you use dates, please use YYYY-MM-DD and not MM/DD/YYYY. The first format is universally understood, the second one almost always trips me up since we use DD.MM.YYYY in Germany.
Usually, datetime stringification takes a locale, and uses the formatter for that locale. Doing i18n by picking one "universally-understood" format, rather than just giving each user the format colloquially familiar to them, is rather uncommon.
I'll use YYYY-MM-DD internally, or in places where sorting is important (e.g., as part of file names).
Also, isn't CSS support for RTL languages kinda iffy? I've noticed that in newer versions of the spec they've begun using start/end rather than left/right, which I'm guessing is meant to help when creating bidirectional interfaces. But how well supported are these changes?
My first language is Spanish. No idea what percentage of my software supports it since I never check. I always prefer using English. Not having a Spanish option has zero impact on me.
I'd be interested in hearing arguments from the pro-i18n/l10n side. I actually have lots of questions about why certain things should be supported at all. For example, why should we support +10 different calendars instead of making everyone use ISO 8601?
If you have enough customers to warrant an international version of an app, it might be worth it to completely redesign the UI around the new audience. The language used applies constraints and makes assumptions that may not be true in other languages. And then there are the culture differences...
Would love to see that. In Clash Royale there's a bug that makes it show what language your opponent is using and English is not even in majority.
I don't think I have the raw data anymore. They don't let you keep that sort of thing when you leave. :)
Instead, Elixir/Phoenix uses gettext, you wrap strings with a gettext call, then you run a task and it generates all the files ready for translation. This means I can still use a main language and translate it if needed, without touching the codebase.
<button>Sign Up</button>
I simply write
<button>{{ 'Sign Up'|trans }}</button>
That way I don't need translation files (EN is default). If translation is not found the "key" is returned which is fine. Once the app is ready I call a command to create my language files and simply translate them.
You’re missing some useful data that would make this decision easier.
We could launch English only for now, making sure that the application is ready to be internationalized in the future.
Most people understand business-english. If your team is English-speaking, chances are, you will have much much higher chance of succeeding there.
I think (but not 100% sure) that it will be the same in southern and eastern Europe.
Northern Europe should be different, they're usually better at learning English.
Also, if you want to land a governmental bid to provide software for some department, it might even be a legal requirement.
For instance, in the scientific or some high-tech branches even for some IT topics, there are sometimes no official translations of the new ideologies.
do you have a large customer who can fund the internationalization?
is there someone who would most certainly become your customer if you internationalized?
otherwise it's a very hopeful use of your valuable engineering resources.