{"id":15628,"date":"2021-11-18T13:31:10","date_gmt":"2021-11-18T11:31:10","guid":{"rendered":"https:\/\/phrase.com\/blog\/?p=15628"},"modified":"2023-05-24T11:50:22","modified_gmt":"2023-05-24T09:50:22","slug":"definition-of-done-for-software-internationalization","status":"publish","type":"post","link":"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/","title":{"rendered":"Finding Your Own Definition of Done for Software Internationalization"},"content":{"rendered":"\n<div id=\"acf\/text-block_864c36d401f5127d086baa086704651a\" class=\"pxblock pxblock--text spacing--default bg--white\">\n\n\t\n\t<div class=\"container\">\n\t\t<div class=\"wysiwyg animate-in\">\n\t\t\t<p><a href=\"https:\/\/phrase.com\/blog\/posts\/i18n-a-simple-definition\/\">Internationalization (i18n)<\/a> is one of the first steps to consider when setting out to launch your software to a global user base. Imagine you had a guest room with velcro-backed wall decals that you changed to suit the preference of each guest. Internationalization would be the velcro that allows you to adapt the look and feel of your room without much effort.<\/p>\n<p>Just like any work done to a house, it\u2019s easy to feel that you can never really \u201cfinish\u201d internationalizing your software. However, finding your own <a href=\"https:\/\/www.leadingagile.com\/2017\/02\/definition-of-done\/\">definition of done (DoD)<\/a> will allow your development efforts to meet the expectations of your users and reduce rework. So let\u2019s take a look at how you can go about finding the best i18n workflow and strategies for your global software product.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_69_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Overview<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#what-is-the-definition-of-done-dod\" title=\"What is the definition of done (DoD)?\">What is the definition of done (DoD)?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#can-a-dod-change-over-time\" title=\"Can a DoD change over time?\">Can a DoD change over time?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#who-creates-a-software-internationalization-dod\" title=\"Who creates a software internationalization DoD?\">Who creates a software internationalization DoD?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#when-can-software-internationalization-be-considered-done\" title=\"When can software internationalization be considered done?\">When can software internationalization be considered done?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#well-structured-code\" title=\"Well-structured code\">Well-structured code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#proper-encoding\" title=\"Proper encoding\">Proper encoding<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#correct-layout-language-length-and-language-direction\" title=\"Correct layout, language length, and language direction\">Correct layout, language length, and language direction<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#localized-images\" title=\"Localized images\">Localized images<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#locale-awareness\" title=\"Locale awareness\">Locale awareness<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#web-accessibility-a11y\" title=\"Web accessibility (A11Y)\">Web accessibility (A11Y)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/phrase.com\/blog\/posts\/definition-of-done-for-software-internationalization\/#use-the-right-technology\" title=\"Use the right technology\">Use the right technology<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"what-is-the-definition-of-done-dod\"><\/span>What is the definition of done (DoD)?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A definition of done is a list of tasks that need to be completed before you can consider a piece of work \u201cdone.\u201d In the context of agile teams working in software internationalization, this list concerns the current sprint and may include such steps as:<\/p>\n<ul>\n<li>Choosing an internationalization library<\/li>\n<li>Deciding on what locale file format you\u2019ll use (e.g., JSON, XLIFF)<\/li>\n<li>Extracting strings from your codebase to a <a href=\"https:\/\/phrase.com\/blog\/posts\/localization-files\/\">localization file<\/a> in your preferred format to make it translatable<\/li>\n<li>Checking that there aren\u2019t any concatenated strings or hard-coded values<\/li>\n<li>Allowing the input of data with format variations (e.g., date formats, <a href=\"https:\/\/phrase.com\/blog\/posts\/number-localization\/\">number conventions and currency formats<\/a>)<\/li>\n<li>Designing the UI to account for text expansion<\/li>\n<li>Creating shortcut key combinations that can be used across all locales<\/li>\n<li>Ensuring terminology consistency to facilitate translations<\/li>\n<\/ul>\n<p>These are just a few examples, but you\u2019ll notice that they cover a broad range of things that need to be achieved before localization can start.<\/p>\n<p>The list may also vary depending on the product and its localization needs: Smaller products with fewer features may just require a handful, while larger applications may require more rigorous standards before they are ready for localization.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"can-a-dod-change-over-time\"><\/span>Can a DoD change over time?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>It can\u2014and if often does. DoDs tend to evolve over time as your product grows and new requirements arise.<\/p>\n<p>For example, you might not have wanted to check that buffers are correctly resized to hold translated strings when you were only localizing into one or two languages, but this feature becomes essential once you want to localize into 10 or 20 languages.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"who-creates-a-software-internationalization-dod\"><\/span>Who creates a software internationalization DoD?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>While developers are usually best qualified to define a software internationalization DoD, localization experts or localization managers can also contribute to it. It\u2019s important that all stakeholders are included in these discussions because everyone needs to be aware of what to expect from your product when it comes to localization.<\/p>\n<p>Moreover, when everyone engages in the process, localization is more likely to be viewed as integral to software development, i.e., running continually in parallel with development cycles rather than being an afterthought.<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div id=\"acf\/blog-cta-block_018c7b3b5be6c892c7752b754a471289\" class=\"pxblock pxblock--blog-cta bg--green image--orientation-portrait\">\n\t<div class=\"block-container\">\n\t\t\t\t\t<div class=\"image image--align-middle\">\n\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1700\" height=\"2200\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2023\/03\/continuous-localization-ebook-cover.png\" class=\"attachment-original size-original\" alt=\"Continuous localization ebook cover | Phrase\" srcset=\"https:\/\/phrase.com\/wp-content\/uploads\/2023\/03\/continuous-localization-ebook-cover.png 1700w, https:\/\/phrase.com\/wp-content\/uploads\/2023\/03\/continuous-localization-ebook-cover-232x300.png 232w, https:\/\/phrase.com\/wp-content\/uploads\/2023\/03\/continuous-localization-ebook-cover-791x1024.png 791w, https:\/\/phrase.com\/wp-content\/uploads\/2023\/03\/continuous-localization-ebook-cover-768x994.png 768w, https:\/\/phrase.com\/wp-content\/uploads\/2023\/03\/continuous-localization-ebook-cover-1187x1536.png 1187w, https:\/\/phrase.com\/wp-content\/uploads\/2023\/03\/continuous-localization-ebook-cover-1583x2048.png 1583w\" sizes=\"(max-width: 1700px) 100vw, 1700px\" \/>\t\t\t<\/div>\n\t\t\t\t<div class=\"content\">\n\t\t\t<p class=\"subhead\">Free download<\/p>\n<p class=\"h5\"><span class=\"h6\" style=\"font-family: Inter, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', 'Liberation Sans', Arial, sans-serif;\">How to build a localization workflow for continuous delivery<\/span><\/p>\n<p class=\"small\">Explore how to implement continuous localization into agile product development to optimize content quality, shorten the release cycle time, and reduce costs.<\/p>\n<p><a class=\"btn btn--outline\" href=\"https:\/\/phrase.com\/resources\/continuous-localization\/\">Download ebook<\/a><\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div id=\"acf\/text-block_885472e58be9fd6a3e616d992989f51b\" class=\"pxblock pxblock--text spacing--default bg--white\">\n\n\t\n\t<div class=\"container\">\n\t\t<div class=\"wysiwyg animate-in\">\n\t\t\t<h2><span class=\"ez-toc-section\" id=\"when-can-software-internationalization-be-considered-done\"><\/span>When can software internationalization be considered done?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>While this may not be a definitive list, and you\u2019ll likely need to refine it to suit your project, here are a few best practices that will help you avoid regrets once you launch your global software:<\/p>\n<h3><span class=\"ez-toc-section\" id=\"well-structured-code\"><\/span>Well-structured code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Generally, i18n involves structuring your codebase so that it is ready for localization. However, first and foremost, your product must be ready for deployment in a monolingual environment before internationalization starts.<\/p>\n<p>Once you\u2019ve ensured this, you might want to check how you\u2019re storing your strings. If your translatable strings are somewhat intertwined with your code, you may want to consider extracting them and putting them in a separate file.<\/p>\n<p>Another challenge is to remove or rework concatenated strings. This is something that takes a little more effort than you may think. You would need your developer team to work closely with your i18n experts to make sure your software can adapt to a different language and no bugs are introduced through this process.<\/p>\n<p>It&#8217;s important to know that code restructuring for i18n goes far beyond simply separating translatable strings. Depending on which languages you seek to localize into, you may need to set up a whole lot of infrastructure, like changes in the user interface, and you will need to adapt your code accordingly.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"proper-encoding\"><\/span>Proper encoding<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Checking what the best encoding type is for the target language is crucial to avoid compatibility issues. Unicode has been established as a standard for most cases that do not require legacy character sets or other encoding schemes.<\/p>\n<p>Within Unicode, UTF-8 is almost always the best choice, unless you have specific requirements that call for another encoding type.<br \/>\nIf your data is mostly in western languages, going for UTF-8 will reduce storage space almost by half compared to UTF-16. However, if your data spans a lot of different double-byte languages and scripts like Japanese, Chinese, or Korean, UTF-8 will take more storage.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"correct-layout-language-length-and-language-direction\"><\/span>Correct layout, language length, and language direction<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Not all languages are the same length, so your software should not enforce a particular limit. This can lead to user interface errors if the translated strings don\u2019t fit into their containers anymore, and no brand wants to display a truncated app title or error message in the user interface.<\/p>\n<p>For this reason, make sure you lay your UI elements relative to each other without fixing their position or size. All containers should be able to dynamically resize based on the length of the text they must contain. If you need to set a maximum size, the industry standard is to allow for an average of 35% of additional space.<\/p>\n<p>Last but not least, your interface should be designed to flip its orientation or layout based on language direction. While the majority of languages are written from left to right (those of Latin origin, as well as Cyrillic, Greek, and various Southeast Asian writing systems), there are some languages, like Arabic and Hebrew, that are written from right to left. Supporting interface mirroring is crucial to make sure your software is accessible in all languages.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"localized-images\"><\/span>Localized images<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To meet the criteria for \u201cdone\u201d, your product features need to be integrated into a clean build. A typical case for i18n here is the re-configuration of those fancy-looking images.<\/p>\n<p>Sure, you\u2019d like to release them into the target market and expect them to attract much attention and generate good returns. At this point, you may have already spent a big sum of money on the design. However, instead of publishing these wonderful images directly on your localized product, you need to check if there is any text embedded in them.<\/p>\n<p>Chances are you will find some descriptive or decorative text hard-coded in the images. Make sure you have them extracted and translated, as well. Also, since the length of each language varies, you may need to adjust the spacing between texts and images.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"locale-awareness\"><\/span>Locale awareness<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To ensure the definition of done is met for your internationalization workflow, you may also need to think of the way how users access the localized release. In other words, in what way would your users navigate to the language they are familiar with?<\/p>\n<p>While some multilingual websites and apps force a particular language onto the user based on their IP address or browser settings, this isn&#8217;t always the smartest choice. It&#8217;s advisable to build software that will allow users to select their preferred language for your software. Make sure your software supports this kind of localization switching, otherwise users will likely reject it due to inconvenience alone.<\/p>\n<p>The easiest solution would be to attach locale names at the end of your web address (e.g., &#8230;\/es_ES would be for Spanish from Spain). However, a more refined way of doing this is adding a language picker that enables users to jump between the different locales.<\/p>\n<p>Locale awareness also means making sure formats of information meet local standards. For example, what does 09\/11 mean? September 11th? November 9th? Depending on the market you choose to sell your product in, a single date format may have a completely different meaning.<\/p>\n<p>You also want to get the measurement right. For example, if you tell someone in Japan you just traveled \u201c17 miles\u201d he or she may have a hard time figuring out how far that is.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"web-accessibility-a11y\"><\/span>Web accessibility (A11Y)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To expand your software\u2019s reach, you should also ensure it\u2019s accessible to users with limitations in their physical capabilities.<br \/>\nThe most basic requirements for web accessibility are:<\/p>\n<ul>\n<li>Text of a size that can be read by people with decreased vision or altered color perception<\/li>\n<li>Images properly captioned with text equivalents (both on-page and alt text in the back-end)<\/li>\n<li>Keyboard support for all interactions to help minimize or eliminate reliance on mouse movements, including requiring double-clicks to activate links<\/li>\n<li>Forms accessible enough to be filled out using just a keyboard<\/li>\n<li>Table summary attributes for concisely describing the structure of the page<\/li>\n<li>Headings hierarchy for the structure of larger pieces of information on the page<\/li>\n<li>Links that clearly describe where they go<\/li>\n<li>Browser zoom of up to 200%<\/li>\n<\/ul>\n<p>These points and more are covered in the <a href=\"https:\/\/www.w3.org\/WAI\/standards-guidelines\/wcag\/\">Web Content Accessibility Guidelines (WCAG)<\/a>, a set of guidelines that show how to make web content more accessible.<br \/>\nYour definition of done for software internationalization will be more comprehensive if you address these aspects. You might need to hire a consultant to do so, but it\u2019s well worth the return.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"use-the-right-technology\"><\/span>Use the right technology<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Releasing a product into a different market is never a one-time job. To be considered done, your i18n efforts should follow an uninterrupted loop where your team can collaborate in a seamless manner.<\/p>\n<p>What tasks this loop might include depends on the product, your goals, and the complexity of your localization process. Regardless of those factors, you can empower collaborative teamwork by using <a href=\"https:\/\/phrase.com\/blog\/posts\/localization-technology\/\">localization technology<\/a> in your workflows.<\/p>\n<p>Whenever there is an update\u2014however small it might be\u2014it\u2019s advisable for it to be synchronized to your localized version, often within a short turnaround time. Moreover, given the complexity of i18n, you need to ensure coordination among different parties. Therefore, by relying on software that enables automation, you can create an agile process that seamlessly integrates with your product release cycle.<\/p>\n<p>Automation in this context doesn\u2019t necessarily mean \u201cmachine translation\u201d\u2014it rather means an automated solution that manages legacy and new development for i18n purposes and moves files between the build and translators back and forth in a fast and efficient manner.<\/p>\n<p>Now that you&#8217;ve gained more knowledge in determining your own definition of done for software internationalization, it\u2019s time to pick a tool that best serves these ends.<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div id=\"acf\/blog-cta-block_731a092b5cc64b5e60e82343aef80546\" class=\"pxblock pxblock--blog-cta bg--green image--orientation-landscape\">\n\t<div class=\"block-container\">\n\t\t\t\t\t<div class=\"image image--align-middle\">\n\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1260\" height=\"992\" src=\"https:\/\/phrase.com\/wp-content\/uploads\/2022\/08\/String_Hero.png\" class=\"attachment-original size-original\" alt=\"String Management UI visual | Phrase\" srcset=\"https:\/\/phrase.com\/wp-content\/uploads\/2022\/08\/String_Hero.png 1260w, https:\/\/phrase.com\/wp-content\/uploads\/2022\/08\/String_Hero-300x236.png 300w, https:\/\/phrase.com\/wp-content\/uploads\/2022\/08\/String_Hero-1024x806.png 1024w, https:\/\/phrase.com\/wp-content\/uploads\/2022\/08\/String_Hero-768x605.png 768w\" sizes=\"(max-width: 1260px) 100vw, 1260px\" \/>\t\t\t<\/div>\n\t\t\t\t<div class=\"content\">\n\t\t\t<p class=\"subhead\">Phrase Strings<\/p>\n<p class=\"secondary h6\">Take your web or mobile app global without any hassle<\/p>\n<div class=\"text--copy\">\n<p class=\"small\">Adapt your software, website, or video game for global audiences with the leanest and most realiable software localization platform.<\/p>\n<p><a class=\"btn btn--outline\" href=\"https:\/\/phrase.com\/platform\/strings\/\">Explore Phrase Strings<\/a><\/p>\n<\/div>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>When can software internationalization be considered done? Our best practices can help you find your own definition of done (DoD).<\/p>\n","protected":false},"author":6,"featured_media":2612,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_stopmodifiedupdate":false,"_modified_date":"","_searchwp_excluded":"","footnotes":""},"categories":[40],"class_list":["post-15628","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-localization"],"acf":[],"_links":{"self":[{"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/posts\/15628"}],"collection":[{"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/comments?post=15628"}],"version-history":[{"count":7,"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/posts\/15628\/revisions"}],"predecessor-version":[{"id":54423,"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/posts\/15628\/revisions\/54423"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/media\/2612"}],"wp:attachment":[{"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/media?parent=15628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phrase.com\/wp-json\/wp\/v2\/categories?post=15628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}