I am looking for opinions from experts that have written software consumed internationally. I would like to understand the best practices people have employeed at each logic
You could write a book about this subject.
At all layers, don't make assumptions about:
I'm sure I'm only scratching the surface.
Make sure that there is plenty of spare room in UI controls. Text has a tendency to become a lot longer when translated from English to something like French or German.
Although it is focused somewhat on the Windows side of i18n things, pay attention to Michael Kaplan's blog. He is very well versed in this field, and has posted many blogs posts containing general stuff that's useful.
Don’t
string foo = "Page " + currentPage + " of " + totalPages;
Do
string foo = string.Format("Page {0} of {1}", currentPage, totalPages);
Why? Word Order Matters.
<value>Page {0} of {1}</value>
<value>{1}ページ中の第{0}ページ</value>
Nothing is sacred in the UI Even something as fundamental as showing green for positive numbers and red for negative numbers is fair game.
For localisation, do not hardcode UI strings. Use something like gettext.
If you're using .Net, The Resource files (.resx) system is very flexible.
Look up usages of ResourceManager.GetString("string name", CultureInfo).
We use this system to flip between English, German, French, Spanish, Russian and Arabic quite successfully.
Also when considering usage in foreign locales, spend some time looking at Input as well as output; the Turkish problem is a good example of how different inputs can cause problems.
Unicode (or wchar, or whatever its equivalent in <language of choice> is) everywhere. Don't store labels in the database. Be prepared to allow text and controls to go "the wrong way", i.e. right-to-left.