Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is internationalizing later really more expensive? [closed]

Most people would agree that internationalizing an existing app is more expensive than developing an internationalized app from scratch.

Is that really true? Or when you write an internationalized app from scratch the cost of doing I18N is just being amortized over multiple small assignments and nobody feels on his shoulders the whole weight of the internationalization task?

You can even claim that a mature app has many and many LOC that where deleted during the project's history, and that they don't need to be I18Ned if internationalization is made as an after thought, but would have been I18N if the project was internationalized from the very beggining.

So do you think a project starting today, must be internationalized, or can that decision be deferred to the future based on the success (or not) the software enjoys and the geographic distribution of the demand.

I am not talking about the ability to manipulate unicode data. That you have for free in most mainstream languages, databases and libraries. I am talking specifically of supporting your own software's user interface in multiple languages and locales.

like image 344
flybywire Avatar asked Feb 25 '10 12:02

flybywire


3 Answers

"when you write an internationalized app from scratch the cost of doing I18N is ... amortized"

However, that's not the whole story.

Retroactively tracking down every message to the users is -- in some cases -- impossible.

Not hard. Impossible.

Consider this.

theMessage = "Some initial part" + some_function() + "some following part";

You're going to have a terrible time finding all of these kinds of situations. After all, some_function just returns a String. You don't know if it's a database key (never shown to a person) or a message which must be translated. And when it's translated, grammar rules may reveal that a 3-part string concatenation was a dumb idea.

You can't simply GREP every String-valued function as containing a possible I18N message that must be translated. You have to actually read the code, and possibly rewrite the function.

Clearly, when some_function has any complexity to it at all, you're stumped as to why one part of your application is still in Swedish while the rest was successfully I18N'd into other languages. (Not to pick on Swedes in particular, replace this with any language used for development different from final deployment.)

Worse, of course, if you're working in C or C++, you might have some of this split between pre-processor macros and proper C-language syntax.

And in a dynamic language -- where code can be built on the fly -- you'll be paralyzed by a design in which you can't positively identify all the code. While dynamically generating code is a bad idea, it also makes your retroactive I18N job impossible.

like image 65
S.Lott Avatar answered Nov 20 '22 10:11

S.Lott


I'm going to have to disagree that it costs more to add it to an existing application than from scratch with a new one.

  • A lot of the time i18n is not required until the application gets 'big'. When you do get big, you will likely have a bigger development team to devote to i18n so it will be less of a burden.
  • You may not actually need it. A lot of small teams put great effort to support internationalization when you have no customers who require it.
  • Once you have internationalized, it makes incremental changes more time consuming. It doesn't take a lot of extra time but every time you need to add a string to the product, you need to add it to the bundle first and then add a reference. No it is not a lot of work but it is effort and does take a bit of time.

I prefer to 'cross that bridge when we come to it' and internationalize only when you have a paying customer looking for it.

like image 41
Chris Dail Avatar answered Nov 20 '22 08:11

Chris Dail


Yes, internationalizing an existing app is definitely more expensive than developing the app as internationalized from day one. And it's almost never trivial.

For instance

Message = "Do you want to load the " & fileType() & " file?"

cannot be internationalised without some code alterations because many languages have grammatical rules like gender agreement. You often need a different message string for loading every possible file type, unlike in English when it's possible to bolt together substrings.

There are many other issues like this: you need more UI space because some languages need more characters than English to express the same concept, you need bigger fonts for East Asia, you need to use localised date/times in the user interface but perhaps English US when communicating with databases, you need to use semicolon as a delimeter for CSV files, string comparisons and sorting are cultural, phone numbers & addresses...

So do you think a project starting today, must be internationalized, or can that decision be deferred to the future based on the success (or not) the software enjoys and the geographic distribution of the demand?

It depends. How likely is the specific project to be internationalised? How important it is to get a first version fast?

like image 1
MarkJ Avatar answered Nov 20 '22 08:11

MarkJ