{"id":6123,"date":"2013-09-03T00:00:00","date_gmt":"2013-09-03T00:00:00","guid":{"rendered":"https:\/\/www.globalizationpartners.com\/2013\/09\/03\/internationalization-i18n-sooner-is-better\/"},"modified":"2021-01-03T11:30:16","modified_gmt":"2021-01-03T11:30:16","slug":"internationalization-i18n-sooner-is-better","status":"publish","type":"post","link":"https:\/\/www.globalizationpartners.com\/2013\/09\/03\/internationalization-i18n-sooner-is-better\/","title":{"rendered":"Internationalization (I18n) sooner is better!"},"content":{"rendered":"<p>During my work in the Internationalization (I18n) \/ Localization (L10n) industry worldwide, I have observed a common approach which impacts negatively the efficient international development of software engineering no matter the technology used or the type of business: The lack of information about the importance and necessity of product internationalization (I18N).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.globalizationpartners.com\/wp-content\/uploads\/2018\/07\/software-internationalization_363x289.jpg\" alt=\"software-internationalization\" width=\"363\" height=\"289\" \/><\/p>\n<p>A typical example: a large or medium company decides to access the e-commerce world using a robust web or smart software to increase its quota over the market. A quick decision is taken to hire a strong developer team or delegate the project to a reputable software house to tackle this mission. Main factors in this narrow vision are: strong and stable application, great features, nice layout and user friendly environment. Nothing, about <a title=\"internationalization\" href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/dd318661%28v=vs.85%29\">internationalization (I18N)<\/a>! Common excuses are usually:\u00a0 not enough time, extra cost or simply I18N can be handled later! These are false pretexts and later will cause real issues technically and financially once the company decides to expand its business to cover other countries with different languages and cultures.<\/p>\n<h5>What is Internationalization (I18n)?<\/h5>\n<p>Simply defined, I18N is a process to prepare any type of application to display any language for any locale and handle appropriately items such as correct currencies, date formats, numbers and layout (right to left or left to right).<\/p>\n<p><strong>When should internationalization start?<\/strong><\/p>\n<p>The best practice is to start the process at the beginning of the analysis phase and to continue the process in parallel with the development process on all levels of an application (UI, business, data layers and database).<\/p>\n<p><strong>Why you should NOT delay I18n to a later phase in development?<\/strong><\/p>\n<p>I18N is do-able later sure, but the internationalization process at this later stage necessities reconstruction of some major parts of the application such as database, data layer, and also front end, third-party controls, scripts etc&#8230; This late in the game re-construction of an application to enable it to support language and locales requires extra effort, extra time and extra expenses versus having planned and coded for I18n since the beginning. Addressing I18n later will take an application back several steps and may result in stability issues and certainly results in repeated testing.<\/p>\n<p>Let me give you some simple examples. Comparison: (example of a simple application)<\/p>\n<table style=\"border: 1px solid #000000;\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>I18N delayed \/ omitted<\/strong><\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>I18N included from the beginning<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Analysis (mainly requirements)<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Analysis(requirements, I18N preparation)<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Database development (traditional structure)<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">DB Development with I18N perspective included<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Data Layer based on the above steps<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Data layer based on the above steps (including I18N)<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Business logic layer based on previous steps<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Business logic including I18N approach from above steps<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Front end development<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Front end development based on I18N rules<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Different types of testing<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Different types of testing<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Beta version<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Beta version<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Release version<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Release version<\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>I18N Required NOW<\/strong><\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>Application is I18N READY<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Re-analyze overall application<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Database partial re-construction<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Data layer adjustment based on the above changes in the database structure<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Business layer adjustment<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Front end <strong>I18N<\/strong> adaptation such as externalize all embedded strings to external repository, same adjustments to be done for third-party components, scripts if needed and other adjustments.<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">A complete re-testing (all testing types)<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Second beta version<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<tr style=\"border: 1px solid #000000;\">\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\">Second release<\/td>\n<td style=\"border: 1px solid #000000;\" valign=\"top\" width=\"319\"><strong>N\/A<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Based on the above comparison, introducing I18N at the beginning of the web or software development cycle can cut time, effort and expenses to almost half in comparison with pursuing application development without I18N but adapted later after the end of development cycle. This impact is even more pronounced for some languages, let&#8217;s take my native language Arabic for example.<\/p>\n<h5>Arabic Language and I18N<\/h5>\n<p>Arabic is one of the languages that clearly demonstrates the importance of considering I18N early as one of the main factors in a software development cycle. The process of internationalization and then localization of software into Arabic includes the following mandatory factors:<\/p>\n<ul>\n<li>Content should be displayed from right to left<\/li>\n<li>Arabic characters should be displayed correctly as they are different then Latin characters<\/li>\n<li>Hijri calendar is a must to use instead of the occidental calendar and related manipulation of dates and time formats<\/li>\n<li>Sentences length in Arabic could be larger than its equivalent in English<\/li>\n<li>Using equivalent currencies based on the Arabic locale (AR-EG: EGP, AR-sa: SAR etc\u2026)<\/li>\n<li>Search input in Arabic words and related complexity regarding manipulating search features from database queries for example<\/li>\n<li>Validations rules of client input<\/li>\n<\/ul>\n<p>The above factors are only a few examples of items that could affect seriously ready-made software when there is a need to I18N it to Arabic. But all these complexities can be avoided if I18N is integrated early during the development phase.<\/p>\n<p>In summary, no matter what the target languages are for localization of your software, I18N is a process that enables an application to display and to deal with any language and locale conventions. Once software is I18N enable, adding new languages in the future become very easy, as it will involve mainly translated resource files and assignment of the new target languages to the software without extra work such as re-analyzing, developing, compiling and extensive testing.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>During my work in the Internationalization (I18n) \/ Localization (L10n) industry worldwide, I have observed a common approach which impacts negatively the efficient international development of software engineering no matter the technology used or the type of business: The lack of information about the importance and necessity of product internationalization (I18N). A typical example: a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":6124,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[1451,1450,1444],"_links":{"self":[{"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/posts\/6123"}],"collection":[{"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/comments?post=6123"}],"version-history":[{"count":4,"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/posts\/6123\/revisions"}],"predecessor-version":[{"id":15965,"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/posts\/6123\/revisions\/15965"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/media\/6124"}],"wp:attachment":[{"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/media?parent=6123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/categories?post=6123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.globalizationpartners.com\/wp-json\/wp\/v2\/tags?post=6123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}