<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:atom="http://www.w3.org/2005/Atom">
  <id>http://www.extremefx.com.ar/</id>
  <title>Extreme|FX</title>
  <updated>2011-10-14T20:16:15+00:00</updated>
  <link href="http://www.extremefx.com.ar/" />
  
  <subtitle>Who will take care of the world after I'm gone?</subtitle>
  <author>
    <name>Marcelo Volmaro</name>
  </author>
  <generator uri="http://dotnetblogengine.net/" version="1.0.0.0">BlogEngine.Net Syndication Generator</generator>
  <blogChannel:blogRoll>http://www.extremefx.com.ar/opml.axd</blogChannel:blogRoll>
  <blogChannel:blink>http://www.extremefx.com.ar/syndication.axd</blogChannel:blink>
  <dc:creator>Marcelo Volmaro</dc:creator>
  <dc:description>Who will take care of the world after I'm gone?</dc:description>
  <dc:language>en-US</dc:language>
  <dc:title>Extreme|FX</dc:title>
  <geo:lat>0.000000</geo:lat>
  <geo:long>0.000000</geo:long>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Extremefx" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="extremefx" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <id>http://www.extremefx.com.ar/post/2011/10/06/Creating-a-Culturally-Customized-Website.aspx</id>
    <title>Creating a Culturally Customized Website</title>
    <updated>2011-10-06T10:52:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=d57a61e6-6b38-4d2e-9e84-813e48379698" />
    <link href="http://www.extremefx.com.ar/post/2011/10/06/Creating-a-Culturally-Customized-Website.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;"Human-Computer Interaction (HCI) research shows that successful interaction depends on more than just using the correct language. Interaction is also dependent upon the culturally embedded meaning of objects such as icons, and metaphors such as the desktop, or the shopping cart (Bourges-Waldegg &amp;amp; Scrivener, 1998; French &amp;amp; Smith, 2000)".&lt;/p&gt;
&lt;p&gt;Cultural customization is a fundamental step for reaching a global audience with your website, and should be completed as part of website translation and website localization. While many website owners treat this step as optional, it should be treated as integral. Website cultural customization can do a lot to validate your presence on the web with your target locale and ensure the effectiveness of your website to locale specific users. Cultural adaption involves perception, symbolism and behavior.&lt;/p&gt;
&lt;p&gt;&lt;img style="float: right;" src="/imgs/blog/galaxy.png" alt="*" /&gt;&lt;strong&gt;Culturally customizing a website&lt;/strong&gt;may sound like a lot of work, and if you are starting with a standard website that had no preparation, considerable effort may be required. However, if you plan for &lt;strong&gt;cultural customization&lt;/strong&gt; at the time a website is initially designed, your work will be considerably reduced.&lt;/p&gt;
&lt;p&gt;Let's begin with a review of the three main types of websites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standard websites:&lt;/strong&gt;this type of website has only one language (usually English) and the same content is intended to reach all countries. No effort was made in terms of  website translation, website localization or website internationalization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Localized websites:&lt;/strong&gt;this type of website ranges from websites with some translated landing pages, websites that are fully translated (localized), to websites that not only offer users with translated content, but also with content specific to their country or locale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Culturally customized websites:&lt;/strong&gt;this type of website not only takes into account the &lt;strong&gt;language&lt;/strong&gt; and &lt;strong&gt;locale&lt;/strong&gt; of the target audience, but also one or more levels of cultural adaptation: perception, symbolism and behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After website translation and website localization, if you are going to do cultural customization for your website, you and your translation services agency should take the following issues into consideration:&lt;/p&gt;
&lt;h2&gt;Using Unicode&lt;/h2&gt;
&lt;p&gt;&lt;img style="float: right;" src="/imgs/blog/Unicode_logo.png" alt="*" /&gt;The very first step in cultural customization is to make sure that a website will be able to display any language. The &lt;a href="http://unicode.org/standard/standard.html"&gt;Unicode Standard&lt;/a&gt; is the universal &lt;a href="http://en.wikipedia.org/wiki/Character_encoding"&gt;character encoding&lt;/a&gt; standard for written characters and text. It defines a consistent way of encoding multilingual text. Unicode characters are represented in one of three encoding forms: a 32-bit form (&lt;a href="http://en.wikipedia.org/wiki/UTF-32/UCS-4"&gt;UTF-32&lt;/a&gt;), a 16-bit form (&lt;a href="http://en.wikipedia.org/wiki/UTF-16/UCS-2"&gt;UTF-16&lt;/a&gt;), and an 8-bit form (&lt;a href="http://en.wikipedia.org/wiki/UTF-8"&gt;UTF-8&lt;/a&gt;). UTF-8 has been designed for ease of use with existing &lt;a href="http://en.wikipedia.org/wiki/ASCII"&gt;ASCII&lt;/a&gt;-based systems and it is usually the default encoding that you should be using on any webpage. Setting up the right encoding will ensure that your website's contents will be correctly displayed. Most Content Management Systems (CMS) already handle all content as UTF-8 encoded text.&lt;/p&gt;
&lt;h2&gt;Flexible Design&lt;/h2&gt;
&lt;p&gt;If possible, use a highly flexible or "fluid" design that allows pages to scale based on what content is in them. If we take an English word as a base, the same word in Russian could be up to 60% longer, while in many Asian languages it could be less than a half the width. Based on the complexity of Asian languages, you may need to scale fonts by about a 120% so they are legible. So, as a rule of thumb, you should avoid using fixed sized structures with text in it - space should be allowed to expand or contract in accordance with the size of the text.&lt;/p&gt;
&lt;h2&gt;Adding "Culture" to the mix&lt;/h2&gt;
&lt;p&gt;&lt;img style="float: right;" src="/imgs/blog/funnel.png" alt="*" /&gt;Our culture affects the way we see the physical world and the meanings we attribute to objects in our environment. As noted before, culture is shaped by our &lt;em&gt;perception&lt;/em&gt; of the word (how we select, filter, organize and interpret information), &lt;em&gt;symbolism&lt;/em&gt; (a person's capacity to respond to or use a system of significant symbols used to understand their environment and create a social reality) and &lt;em&gt;behavior&lt;/em&gt; (what forces us to behave and react the way we do). If you're designing a website for a culturally diverse audience, you should carefully consider what visual representations you use on your website, as their meanings can vary considerably from culture to culture.&lt;/p&gt;
&lt;p&gt;A complete discussion of this topic would constitute a complete book, I have noted an excellent one below from Nitish Singh entitled "&lt;a href="http://www.theculturallycustomizedwebsite.com/" target="_blank"&gt;The Culturally Customized Web Site: Customizing Websites for the Global Marketplace&lt;/a&gt;". Let me provide you with some examples so you can have a grasp of the basic concepts:&lt;/p&gt;
&lt;h3&gt;Perception&lt;/h3&gt;
&lt;p&gt;There are many factors that affect perception. One of the most important and easiest factors to adjust after  website localization is color. People from different cultures do not perceive colors in the same way. The following chart&lt;sup&gt;&amp;Dagger;&lt;/sup&gt; gives some examples of color and their meaning in different cultures.&lt;/p&gt;
&lt;table class="nicetable" style="width: 100%;" border="0" cellspacing="0" cellpadding="0"&gt;
&lt;thead&gt; 
&lt;tr&gt;
&lt;th&gt;COLOR&lt;/th&gt; &lt;th&gt;USA&lt;/th&gt; &lt;th&gt;China &lt;/th&gt; &lt;th&gt;India &lt;/th&gt; &lt;th&gt;Egypt&lt;/th&gt; &lt;th&gt;Japan &lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt; 
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="background: red;"&gt;Red&lt;/td&gt;
&lt;td&gt;Danger&lt;br /&gt; Love&lt;br /&gt; Stop&lt;/td&gt;
&lt;td&gt;Good fortune&lt;br /&gt; Luck&lt;br /&gt; Joy&lt;/td&gt;
&lt;td&gt;Luck&lt;br /&gt; Fury&lt;br /&gt; Masculine&lt;/td&gt;
&lt;td&gt;Death&lt;/td&gt;
&lt;td&gt;Anger&lt;br /&gt; Danger&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background: orange;"&gt;Orange&lt;/td&gt;
&lt;td&gt;Confident&lt;br /&gt; Dependable&lt;br /&gt; Corporate&lt;/td&gt;
&lt;td&gt;Fortune&lt;br /&gt; Luck&lt;br /&gt; Joy&lt;/td&gt;
&lt;td&gt;Sacred (the Color Saffron)&lt;/td&gt;
&lt;td&gt;Virtue&lt;br /&gt; Faith&lt;br /&gt; Truth&lt;/td&gt;
&lt;td&gt;Future&lt;br /&gt; Youth&lt;br /&gt; Energy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background: yellow;"&gt;Yellow&lt;/td&gt;
&lt;td&gt;Coward&lt;br /&gt; Joy&lt;br /&gt; Hope&lt;/td&gt;
&lt;td&gt;Wealth&lt;br /&gt; Earth&lt;br /&gt; Royal&lt;/td&gt;
&lt;td&gt;Celebration&lt;/td&gt;
&lt;td&gt;Mourning&lt;/td&gt;
&lt;td&gt;Grace&lt;br /&gt; Nobility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background: green;"&gt;Green&lt;/td&gt;
&lt;td&gt;Spring&lt;br /&gt; Money&lt;br /&gt; New&lt;/td&gt;
&lt;td&gt;Health&lt;br /&gt; Prosperity&lt;br /&gt; Harmony&lt;/td&gt;
&lt;td&gt;Romance&lt;br /&gt; New&lt;br /&gt; Harvest&lt;/td&gt;
&lt;td&gt;Happiness&lt;br /&gt; Prosperity&lt;/td&gt;
&lt;td&gt;Eternal life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background: blue;"&gt;Blue&lt;/td&gt;
&lt;td&gt;Confident&lt;br /&gt; Dependability&lt;br /&gt; Corporate&lt;/td&gt;
&lt;td&gt;Heavenly&lt;br /&gt; Clouds&lt;/td&gt;
&lt;td&gt;Mourning&lt;br /&gt; Disgust&lt;br /&gt; Chilling&lt;/td&gt;
&lt;td&gt;Virtue&lt;br /&gt; Faith&lt;br /&gt; Truth&lt;/td&gt;
&lt;td&gt;Villainy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background: purple;"&gt;Purple&lt;/td&gt;
&lt;td&gt;Royalty&lt;br /&gt; Imagination&lt;/td&gt;
&lt;td&gt;Royalty&lt;/td&gt;
&lt;td&gt;Unhappiness&lt;/td&gt;
&lt;td&gt;Virtue&lt;/td&gt;
&lt;td&gt;Wealth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background: black; color: white;"&gt;Black&lt;/td&gt;
&lt;td&gt;Funeral&lt;br /&gt; Death&lt;br /&gt; Evil&lt;/td&gt;
&lt;td&gt;Heaven&lt;br /&gt; Neutral&lt;br /&gt; High Quality&lt;/td&gt;
&lt;td&gt;Evil&lt;/td&gt;
&lt;td&gt;Death&lt;br /&gt; Evil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="background: white;"&gt;White&lt;/td&gt;
&lt;td&gt;Purity&lt;br /&gt; Peace&lt;br /&gt; Holy&lt;/td&gt;
&lt;td&gt;Mourning&lt;/td&gt;
&lt;td&gt;Fun&lt;br /&gt; Serenity&lt;br /&gt; Harmony&lt;/td&gt;
&lt;td&gt;Joy&lt;/td&gt;
&lt;td&gt;Purity&lt;br /&gt; Holiness&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Naturally you can't accommodate every single culture with your design. But if your website is correctly structured and you have your content separated from your design (as you should), adjusting the main "theme" of a website is as easy as dropping a couple of selectors on the main CSS with a lang=xxx attribute selector.&lt;/p&gt;
&lt;h3&gt;Symbolism&lt;/h3&gt;
&lt;p&gt;&lt;img style="float: right;" src="/imgs/blog/thumbs-up.png" alt="*" /&gt;We all use symbols, almost unconsciously, on a daily basis. We don't even have to think about them as we take their meaning for granted. But there are times when the same symbol could mean two completely different things from one culture to another. One of the common examples is the &lt;a href="http://history1900s.about.com/cs/swastika/a/swastikahistory.htm"&gt; Swastika&lt;/a&gt;: most of us will associate it with the Nazi movement. But for Hindus, it is the symbol of good luck and well-being. The swastika is used in all Hindu &lt;a href="http://en.wikipedia.org/wiki/Yantra"&gt;yantras&lt;/a&gt; and religious designs.&lt;/p&gt;
&lt;p&gt;Another seemingly harmless example is the "thumbs-up" gesture. Many countries recognize this as a sign of approval or confirmation, and a graphic designer looking for a graphical way to let users know that they have successfully completed an action might be tempted to base an icon on this image. However, in modern day Afghanistan, Iraq and parts of Greece, Italy and France this simple gesture can be considered to be very impolite. In fact it is often regarded as the equivalent of the "middle finger salute" used in the UK and USA.&lt;/p&gt;
&lt;h3&gt;Behavior&lt;/h3&gt;
&lt;p&gt;Behavior is defined by the following cultural values&lt;sup&gt;&amp;dagger;&lt;/sup&gt; : Collectivism, Power Distance, Uncertainty Avoidance, Masculinity-Femininity and High-Low Context. Behavior is what it "drives" us to do something and it is an entire topic by itself. Basic behavior is influenced by the tone of the writing in content, images, layout, etc. It has a big influence on any "Call-to-Action", as they are tightly connected.&lt;/p&gt;
&lt;p&gt;This concept is the hardest point to implement, as it may involve significant design changes, modification to the tone of the writing (so, you will not be simply translating content into another language, but copywriting it), and swapping images. For instance, a woman in a scanty swimsuit draped over a red sports car would be inappropriate for many global target markets.&lt;/p&gt;
&lt;h2&gt;Putting the World into Web&lt;/h2&gt;
&lt;p&gt;As you can see, creating a culturally correct website could be as huge task if you want to do it "by the book." But most of these tasks can be accomplished by doing moderate research on target locales, coding the website following the recommended standards, and adjusting the localized website content to avoid insulting the target, global audience.&lt;/p&gt;
&lt;p&gt;The first items (using Unicode and flexible design) should not have a big impact on the website localization budget. If the design process took colors and symbols into consideration, probably only minor adjustments would be required, based on the locale, with minimal cost.&lt;/p&gt;
&lt;p&gt;Behavior is the hardest point to achieve, not only because of the technical issues (you may need to have different templates for different regions) but also because maintenance costs can sometimes be very high.&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;&amp;dagger;&lt;/sup&gt; Hofstede, Geert. Culture's Consequences, Comparing Values, Behaviors, Institutions, and Organizations across Nations Thousand Oaks, CA: Sage Publications, 2001&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;&amp;Dagger;&lt;/sup&gt;Small extract from the global color chart on "Beyond Borders", Yunker 2003&lt;/p&gt;</summary>
    <published>2011-10-06T10:52:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2011/10/06/Creating-a-Culturally-Customized-Website.aspx#comment" />
    <category term="Website Translation" />
    <dc:publisher>CheloXL</dc:publisher>
    <dc:description>Cultural customization is a fundamental step for reaching a global audience with your website, and should be completed as part of website translation and website localization. While many website owners treat this step as optional, it should be treated as integral. 
Website cultural customization can do a lot to validate your presence on the web with your target locale and ensure the effectiveness of your website to locale specific users. Cultural adaption involves perception, symbolism and behavior.</dc:description>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=d57a61e6-6b38-4d2e-9e84-813e48379698</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=d57a61e6-6b38-4d2e-9e84-813e48379698</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2011/10/06/Creating-a-Culturally-Customized-Website.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=d57a61e6-6b38-4d2e-9e84-813e48379698</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2011/07/21/Website-Internationalization-and-Accessibility.aspx</id>
    <title>Website Internationalization and Accessibility</title>
    <updated>2011-07-21T14:55:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=4378c97a-7d61-44d2-850d-5535c1e2ef48" />
    <link href="http://www.extremefx.com.ar/post/2011/07/21/Website-Internationalization-and-Accessibility.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;The World Wide Web is capable of living up to its name: by being accessible to everyone in the world. This is more or less true, as there are still many web users whose needs aren't adequately met. The Word Wide Web Consortium (&lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt;) has several recommendations on how to make a webpage accessible by users, not only with disabilities, but also by users that do not speak English.&lt;/p&gt;
&lt;h2&gt;What is Accessibility?&lt;/h2&gt;
&lt;p&gt;Here is a definition from the Web Accessibility Initiative &lt;a href="http://www.w3.org/WAI/intro/accessibility.php"&gt;WAI&lt;/a&gt;: "&amp;hellip; Web accessibility means that people with disabilities can perceive, understand, navigate, and interact with the Web, and that they can contribute to the Web. Web accessibility also benefits others, including older people with changing abilities due to aging."&lt;/p&gt;
&lt;h2&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;Internationalization is the practice of making content available in a variety of languages, not simply one. On the web, languages determine the direction of the text, the fonts used, or even the dictionary for pronunciation used by a screen reader.&lt;/p&gt;
&lt;p&gt;Basically, a website is composed of three layers: Content, Presentation and Behavior.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;content layer&lt;/strong&gt; is what your readers are coming to get when they come to your Web page. Content can consist of text or images and includes the pointers that your readers need to navigate around your website. In web development, &lt;strong&gt;HTML&lt;/strong&gt; makes up the content layer and it also structures the web document.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;presentation layer&lt;/strong&gt; is how the document will look to your readers. This layer is defined by the &lt;strong&gt;CSS&lt;/strong&gt; or styles that indicate how your document should be displayed and on what media types.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;behavior layer&lt;/strong&gt; is the layer of a webpage that performs a function. If you use Ajax or DHTML, it is the JavaScript that makes the page do something. If you have a PHP/.Net or any other kind of back-end, it is that back-end that produces results when your reader clicks something on the webpage. For most web pages, the first level of behavior is the JavaScript interactions on the page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the principles of web accessibility is that these three types of information should be separated from one other. Blind users will certainly not be able to "see" anything on screen, so another way to "present" the information to that user needs to be created. Arabic online users would have an unpleasant experience trying to read left-aligned Arabic content and Chinese users would have a hard times trying to read 11px Chinese text. As you can see, accessibility it is not only for blind people.&lt;/p&gt;
&lt;h2&gt;Accessibility Standards&lt;/h2&gt;
&lt;p&gt;You would have to spend a small fortune doing website testing to assure proper presentation on all possible devices. You already know how hard it can be to fully test a design on mainstream browsers, if you have to accommodate really old browsers that do not follow the standards, like IE6. Adding assistive technology software and hardware to the mix makes the task nearly impossible.&lt;/p&gt;
&lt;p&gt;So, how do web developers deal with these issues? Subject matter experts on accessibility around the world compiled their knowledge and created a set of recommendations for web developers to follow. By learning these standards, a web developer won't have to spend time researching every possible access method. By following these standards, he can be reasonably sure that a compliant webpage will be accessible to a broad audience.&lt;/p&gt;
&lt;h2&gt;Cascading Style Sheets&lt;/h2&gt;
&lt;p&gt;&lt;img style="float: right;" src="/imgs/blog/Braille.jpg" alt="*" /&gt; &lt;a href="http://www.w3.org/Style/CSS/learning"&gt;Cascading Style Sheets&lt;/a&gt;(CSS) is a simple way to add style (fonts, colors, layout, etc.) to web pages. CSS were designed primarily to enable the separation of document content from document presentation.&lt;/p&gt;
&lt;p&gt;If we broaden our understanding of "presentation" to mean something more like "representation," thereby obviating even an implied visual form, it becomes possible to customize CSS for a range of output media. It also becomes possible to write separate style sheets for media, whose modes of presentation vary enormously, from Braille to printers to computer screens.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.w3.org/TR/CSS21/"&gt;CSS Level 2&lt;/a&gt;media types were defined in 1998. Their details (as excerpted from the W3C document focusing on accessibility-specific media) are as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Aural&lt;/strong&gt;: Intended for speech synthesizers.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Braille&lt;/strong&gt;: Intended for Braille tactile feedback devices.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Embossed&lt;/strong&gt;: Intended for paged Braille printers.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Print&lt;/strong&gt;: Intended for paged, opaque material and for documents viewed on screen in print preview mode.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Screen&lt;/strong&gt;: Intended primarily for color computer screens.&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.abouttty.com/"&gt; &lt;strong&gt;TTY&lt;/strong&gt; &lt;/a&gt;: Intended for media using a fixed-pitch character grid, such as teletypes, terminals, or portable devices with limited display capabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The preferred method of styling a document involves external style sheets - separately-maintained documents that can be included by reference in an unlimited number of HTML files and updated in one single operation. Style sheets are then linked to a document as follow:&lt;/p&gt;
&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;link rel="stylesheet" href="stylesheet.css" type="text/css" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To use media style sheets, simply add one more attribute to the link attribute &lt;em&gt;media&lt;/em&gt;. Some possible examples:&lt;/p&gt;
&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;link rel="stylesheet" href="tty.css" type="text/css" media="tty" /&amp;gt;
&amp;lt;link rel="stylesheet" href="aural.css" type="text/css" media="aural" /&amp;gt;
&amp;lt;link rel="stylesheet" href="braille.css" type="text/css" media="braille" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you do not specify a medium for a style sheet, graphical Web browsers default to an interpretation of media="all". In CSS Level 2, you do not have to use separate style sheets for different media; you can use the @media rule to specify the media.&lt;/p&gt;
&lt;p&gt;You can also pair media queries with pseudo-classes, most notability the &lt;em&gt;lang&lt;/em&gt; pseudo-class. The CSS Level 2 specification defines a special pseudo class, :lang(), for indicating rules that should be applied only to elements that match a certain language. Such a rule is written as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code class="css"&gt;:lang(zh-CN) { font-size: 120%; }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This would display anything written in Simplified Chinese language with a font size 1.2 times larger than the base size specified for the whole document.&lt;/p&gt;
&lt;p&gt;Under the &lt;a href="http://www.w3.org/TR/WCAG20/"&gt;Web Content Accessibility Guidelines&lt;/a&gt;, you are required to specify changes in the language used in documents. You do this by adding the lang="languagecode" attribute to virtually any tag (like &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;, &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;, &amp;lt;cite&amp;gt;&amp;lt;/cite&amp;gt;, or &amp;lt;hx&amp;gt;&amp;lt;/hx&amp;gt;. Also, in order to specify a change in language, you must already have declared the default, base, or original language, which you do by adding lang="languagecode" to the &amp;lt;body&amp;gt; or (preferably) &amp;lt;html&amp;gt; tags&lt;/p&gt;
&lt;pre&gt;&lt;code class="html"&gt;&amp;lt;p lang="zh-CN"&amp;gt; 关于我们&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By itself, :lang() is not particularly useful, but when combined with other CSS rules and properties, it can be quite powerful.&lt;/p&gt;
&lt;h3&gt;List Markers&lt;/h3&gt;
&lt;p&gt;One way in which :lang() rules can be used is to set an appropriate marker for ordered lists. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="css"&gt;ol li:lang(hy-AM) { list-style-type: armenian; }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That will set the list style to traditional uppercase Armenian numbering for Armenian text. There are specific values for Armenian, Georgian, Roman and Greek numbers/letters. You can find a complete list at &lt;a href="http://www.w3.org/TR/CSS21/generate.html#list-style"&gt;W3C&lt;/a&gt; Generated content, automatic numbering, and lists.&lt;/p&gt;
&lt;h3&gt;Bidirectional Text&lt;/h3&gt;
&lt;p&gt;Two CSS properties, direction and unicode-bidi, are used to affect the calculation of the correct direction. In most cases, you won't need to use these properties if you set the correct language on the document/text run, but you may occasionally need to change text direction. You should first use the unicode-bidi property to create an additional level of embedding or to set up an override. Then the value of direction can be set to either ltr (left-to-right) or rtl (right-to-left).&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Users with disabilities are as entitled to use the Web as anyone else, but often they are unable to access websites due to careless web design. Using Cascading Style Sheets is an excellent first step toward developing a website that can be used by everyone, as style sheets separate presentation from content. &lt;a href="http://www.microsoft.com/enable/at/types.aspx"&gt;Assistive technology devices&lt;/a&gt; and software can often enable access by disabled users, but only if sites are designed in accordance with Web accessibility standards. The W3C has produced Web Content Accessibility Guidelines that are an invaluable resource for Web developers.&lt;/p&gt;
&lt;p&gt;In addition to users with disabilities, users in non-English-speaking countries also use the Web. CSS is designed with internationalization in mind; for example, rules can be made for specific languages with the :lang() pseudo-element, and the list-style-type property can produce a number of non-English number markers.&lt;/p&gt;
&lt;h3&gt;Keeping the goal of website globalization in mind&lt;/h3&gt;
&lt;p&gt;Whether you are trying to release a multilingual product in order to increase your global market share and ROI or you are trying to increase your company's global operational efficiencies by developing multilingual websites, website globalization is a requirement to make either a reality. Each client's needs are somewhat unique and there are a variety of factors that can influence resources and costs involved in a complex software globalization project.&lt;/p&gt;</summary>
    <published>2011-07-21T14:55:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2011/07/21/Website-Internationalization-and-Accessibility.aspx#comment" />
    <category term="Misc" />
    <category term="Website Translation" />
    <dc:publisher>CheloXL</dc:publisher>
    <dc:description>The World Wide Web is capable of living up to its name: by being accessible to everyone in the world. This is more or less true, as there are still many web users whose needs aren’t adequately met. The Word Wide Web Consortium (W3C) has several recommendations on how to make a webpage accessible by users, not only with disabilities, but also by users that do not speak English.</dc:description>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=4378c97a-7d61-44d2-850d-5535c1e2ef48</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=4378c97a-7d61-44d2-850d-5535c1e2ef48</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2011/07/21/Website-Internationalization-and-Accessibility.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=4378c97a-7d61-44d2-850d-5535c1e2ef48</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2010/08/27/Website-Localization-with-Ektron-e28093-Part-2.aspx</id>
    <title>Website Localization with Ektron – Part 2</title>
    <updated>2010-08-27T09:33:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=6c8f5f9c-f33e-4e83-8f8d-17e079c16dbd" />
    <link href="http://www.extremefx.com.ar/post/2010/08/27/Website-Localization-with-Ektron-e28093-Part-2.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;h2&gt;Setting up the correct Locale&lt;/h2&gt;
&lt;p&gt;The first thing we should do is to make sure that the system responds to the user in the correct (user selected) locale. To do this, we should not only rely on the content returned by Ektron (that will be in the correct locale) but also we should tell the system to use that same locale to present any information requested outside Ektron in the same locale.&lt;/p&gt;
&lt;p&gt;Since we are dealing with a website, and based on &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; best practices, the locale initialization must be done with the &lt;a href="http://msdn.microsoft.com/en-us/library/bz9tc508.aspx"&gt;InitializeCulture&lt;/a&gt; method, by overriding it and setting the &lt;em&gt;CurrentCulture&lt;/em&gt; and &lt;em&gt;CurrentUICulture&lt;/em&gt; for the current thread. The Culture value determines the results of culture-dependent functions, such as the date, number, and currency formatting, and so on. The UICulture value determines which resources are loaded for the web page.&lt;/p&gt;
&lt;p&gt;Since we would have to use the above on every template on our website and that's not only too time consuming, but also error prone (if you add a new web page and forget to add the code, some items on that web page may not work as expected), I usually create a LocalizablePage class that inherits from the System.Web.UI.Page and I override the InitializeCulture method with the initialization code. Then the only thing that I have to remember is to change the inheritance of every template from System.Web.UI.Page to LocalizablePage.&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;namespace EktronLibrary {
    using System.Globalization;
    using System.Web.UI;

    public class LocalizablePage : Page {
        protected override void InitializeCulture() {
            //this is here just to make sure the culture is correctly initialized
            CultureInfo c = Utilities.CurrentCulture;
            base.InitializeCulture();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see on the code above, I did not directly place all the initialization code on the LocalizablePage class, but I created a helper class that does all this for me. Also that class returns what is the actual user-selected locale and what's the default locale selected in Ektron. These two values will come in handy for some of the next tasks.&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;namespace EktronLibrary {
    using System.Globalization;
    using System.Threading;
    using System.Web;
    using Ektron.Cms.Controls;

    public static class Utilities {
        private static int _lastCulture;
        private static CultureInfo _lastCultureInfo;
        private static readonly object _cultureLock = new object();

        static Utilities() {
            using (LanguageAPI languageApi = new LanguageAPI()) {
                DefaultCulture = new CultureInfo(languageApi.DefaultLanguageID);
            }
        }

        public static CultureInfo DefaultCulture {
            get;
            private set;
        }

        public static CultureInfo CurrentCulture {
            get {
                using(LanguageAPI languageApi = new LanguageAPI()) {
                    if (_lastCulture != languageApi.CurrentLanguageID) {
                        HttpContext.Current.Application.Lock();
                        lock (_cultureLock) {
                            _lastCulture = languageApi.CurrentLanguageID;
                            _lastCultureInfo = new CultureInfo(_lastCulture);
                            Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = _lastCultureInfo;
                        }
                        HttpContext.Current.Application.UnLock();
                    }
                }

                return _lastCultureInfo;
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Adding LANG attribute to the html tag&lt;/h2&gt;
&lt;p&gt;Now that we have our system and code properly set, we need to tell the browser/spiders in which language we are serving the page. For this you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add a Literal control inside the html tag and from the code behind, write the appropriate code for the literal to display the current locale, or&lt;/li&gt;
&lt;li&gt;Use the code below to simply replace the html tag by a .net control that will render the html tag and also take care of setting the correct attribute. As you can see, this piece of code uses the CurrentCulture property of our helper class to ensure that we always use the correct user selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class="cs"&gt;using System.Web.UI;

[assembly: TagPrefix(@"EktronLibrary.Controls", @"EktLib")]
namespace EktronLibrary.Controls {
    using System.Text;
    using System.Web.UI;

    [ToolboxData(@"&amp;lt;{0}:EktronHtmlTag runat=server /&amp;gt;")]
    public class EktronHtmlTag : Control {
        protected override void Render(HtmlTextWriter pOutput) {
            StringBuilder strb = new StringBuilder(@"", Utilities.CurrentCulture.Name);
            pOutput.Write(strb.ToString());
            RenderChildren(pOutput);
            pOutput.Write("");
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Taking care of content directionality&lt;/h2&gt;
&lt;p&gt;Again, we created another control that you can simply drop in your templates (inside the body tag); making sure it wraps all the content of your website. This control will render a DIV tag with the DIR attribute correctly set (rtl for Right-to-Left or ltr for Left-to-Right) based on the page target language. The DIR attribute is being applied to a DIV and not to the BODY tag because some speakers of languages that use right-to-left scripts prefer the directionality of the user interface to be associated with the desktop environment and not with the content of a particular document.&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;using System.Web.UI;

[assembly: TagPrefix(@"EktronLibrary.Controls", @"EktLib")]
namespace EktronLibrary.Controls {
    using System;
    using System.ComponentModel;
    using System.Text;
    using System.Web.UI;

    [ToolboxData(@"&amp;lt;{0}:EktronContentDirectionality runat=server /&amp;gt;")]
    public class EktronContentDirectionality : Control {
        [Category("EktLib Component")]
        public string ClassName { get; set; }

        protected override void Render(HtmlTextWriter pOutput) {
            StringBuilder strb = new StringBuilder("&amp;lt;div ");

            string langName = Utilities.CurrentCulture.TwoLetterISOLanguageName;
            string dir = (langName.Equals(@"ar", StringComparison.OrdinalIgnoreCase) ||
                langName.Equals(@"ur", StringComparison.OrdinalIgnoreCase) ||
                langName.Equals(@"fa", StringComparison.OrdinalIgnoreCase) ||
                langName.Equals(@"he", StringComparison.OrdinalIgnoreCase)) ?
                    @"rtl" :
                    @"ltr";

            if (!string.IsNullOrEmpty(ClassName)) {
                strb.AppendFormat("class=\"{0}\" ", ClassName);
            }

            strb.AppendFormat(@"dir=""{0}""&amp;gt;", dir);

            pOutput.Write(strb.ToString());
            RenderChildren(pOutput);
            pOutput.Write("&amp;lt;/div&amp;gt;");
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Localizing hard-coded images&lt;/h2&gt;
&lt;p&gt;If an image is linked on a page from the content in Ektron, it is easy to go to that page, edit the localized version and replace the image. But when dealing with images hard-coded into the templates (Logos, graphics with overprinted text, etc.) you cannot resort to the features Ektron provides. In these cases, you have to pick the correct image for the user selected locale.&lt;/p&gt;
&lt;p&gt;The code below shows you an example of a user-control that takes care of everything for you. The control has the same set of attributes as the IMG tag. The only difference is on how the control renders the IMG tag. If the website is being displayed in the Ektron default language (set on the web.config), the control will look for the image on the path/filename combination you specified on the Source attribute. But when the user changes the language of the site, the control will try to load the image from the same path as the original version, but the control will append to the name an underscore (_) and then the full name for the selected locale (es-ES for Spanish/Spain, ja-JA for Japanese/Japan, zh-CN for Simplified Chinese/China, etc). So, for example, if the original image is located under this path "/images/subfolder/header.jpg", the Spanish version will be located/named as "/images/subfolder/header_es-ES.jpg" and the Japanese version will be "/images/subfolder/header_ja-JP.jpg"&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;using System.Web.UI;

[assembly: TagPrefix(@"EktronLibrary.Controls", @"EktLib")]
namespace EktronLibrary.Controls {
    using System.Drawing.Design;
    using System.Web.UI;
    using System.ComponentModel;
    using System.Text;
    using System.Web;
    using System.Web.UI.Design;

    [ToolboxData(@"&amp;lt;{0}:EktronLocalizableImage runat=server /&amp;gt;")]
    public class EktronLocalizableImage : Control {
        [Category("EktLib Component"), DefaultValue(""), Localizable(true)]
        public string Alt {
            get;
            set;
        }

        [Category("EktLib Component"), DefaultValue(""), Localizable(true)]
        public string Title {
            get;
            set;
        }

        [Category("EktLib Component"), DefaultValue("")]
        public string UseMap {
            get;
            set;
        }

        [Category("EktLib Component"), DefaultValue("")]
        public string ClassName {
            get;
            set;
        }

        [Category("EktLib Component"), DefaultValue("")]
        public string Style {
            get;
            set;
        }

        [Category("EktLib Component"), Editor(typeof (UrlEditor), typeof (UITypeEditor))]
        public string Source {
            get;
            set;
        }

        [Category("EktLib Component")]
        public int Width {
            get;
            set;
        }

        [Category("EktLib Component")]
        public int Height {
            get;
            set;
        }

        protected override void Render(HtmlTextWriter pOutput) {
        StringBuilder strb = new StringBuilder(@"&amp;lt;img");
        if (Utilities.CurrentCulture.LCID == Utilities.DefaultCulture.LCID) {
            strb.AppendFormat(@" src=""{0}""", Source);

        } else {
            int dot = Source.LastIndexOf('.');
            strb.AppendFormat(@" src=""{0}_{2}.{1}""",
                    Source.Substring(0, dot),
                    Source.Substring(dot + 1),
                    Utilities.CurrentCulture.Name);
        }

        if (!string.IsNullOrEmpty(Alt)) {
            strb.AppendFormat(" alt=\"{0}\"", HttpUtility.HtmlAttributeEncode(Alt));
        }

        if (!string.IsNullOrEmpty(Title)) {
            strb.AppendFormat(" title=\"{0}\"", HttpUtility.HtmlAttributeEncode(Title));
        }

        if (!string.IsNullOrEmpty(UseMap)) {
            strb.AppendFormat(@" usemap=""{0}""", HttpUtility.HtmlAttributeEncode(UseMap));
        }

        if (!string.IsNullOrEmpty(ClassName)) {
            strb.AppendFormat(" class=\"{0}\"", HttpUtility.HtmlAttributeEncode(ClassName));
        }

        if (!string.IsNullOrEmpty(Style)) {
            strb.AppendFormat(" style=\"{0}\"", HttpUtility.HtmlAttributeEncode(Style));
        }

        if (Width &amp;gt; 0) {
            strb.AppendFormat(" width=\"{0}\"", Width);
        }

        if (Height &amp;gt; 0) {
            strb.AppendFormat(" height=\"{0}\"", Height);
        }

        strb.Append("/&amp;gt;");
        pOutput.Write(strb.ToString());
    }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Localizing hard-coded text&lt;/h2&gt;
&lt;p&gt;You have two options here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remove all the hard-coded text from the templates, placing them in resource files (.resx) and then use the Literal asp.net control to place it back on the templates. The resource file will have to be sent to the translation company as part of the localization process, along with the content exported from Ektron. If you are using the LocalizablePage class as the base class for all your templates, the system will automatically pick-up the correct resource file once the translated resources are back in place.&lt;/li&gt;
&lt;li&gt;&lt;img class="liquid" src="/imgs/blog/EktronSmartForm.png" alt="Ektron Setup" /&gt; Remove all the hard-coded text from the templates, placing them in smart-forms within Ektron, and then use the standard ContentBlock control from Ektron to place the text back into the templates. You will have to also provide the control with an XSLT file that the control will use to render the content, and the content ID for the text you want to display. This method has the advantages of letting the Website administrator edit/import/export the text from within Ektron's Workarea.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class="xml"&gt;&amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;
    &amp;lt;xsl:output omit-xml-declaration="yes" /&amp;gt;

    &amp;lt;xsl:template match="/root"&amp;gt;
        &amp;lt;xsl:value-of select="DictionaryEntry"/&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And there you have it&amp;hellip; If you correctly implement the techniques mentioned above, you will have a "bullet-proof" base of templates that will be localization-friendly and that may require minimal adjustments to be done over the QA phase.&lt;/p&gt;
&lt;p&gt;I hope the "Website Localization with Ektron CMS" 2-part series of articles has provided you with useful information on how to correctly author multilingual websites under the Ektron CMS.&lt;/p&gt;</summary>
    <published>2010-08-27T09:33:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2010/08/27/Website-Localization-with-Ektron-e28093-Part-2.aspx#comment" />
    <category term="Website Translation" />
    <dc:publisher>CheloXL</dc:publisher>
    <dc:description>Setting up correct Locales, adding Lang attributes and localizing hard-coded images are among the technical steps detailed in this final blog in this 2-part series on Website Localization with Ektron CMS.</dc:description>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=6c8f5f9c-f33e-4e83-8f8d-17e079c16dbd</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=6c8f5f9c-f33e-4e83-8f8d-17e079c16dbd</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2010/08/27/Website-Localization-with-Ektron-e28093-Part-2.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=6c8f5f9c-f33e-4e83-8f8d-17e079c16dbd</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2010/08/06/Website-Localization-with-Ektron-Web-CMS-Part-1.aspx</id>
    <title>Website Localization with Ektron Web CMS Part 1</title>
    <updated>2010-08-06T18:24:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=2d07fba9-6021-4b95-9ac9-d3e8694496b9" />
    <link href="http://www.extremefx.com.ar/post/2010/08/06/Website-Localization-with-Ektron-Web-CMS-Part-1.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;This is the Part 1 (of 2) on "Website Localization with Ektron Web CMS". In this part I will discuss how to correctly setup a multilingual website within Ektron and also provide some additional information about website localization in general.&lt;/p&gt;
&lt;h2&gt;Setting up Ektron&lt;/h2&gt;
&lt;p&gt;When setting up a multilingual website in &lt;a href="http://www.ektron.com/"&gt;Ektron&lt;/a&gt;, there are several factors that fall outside the translation-only process that is built into the web system. Let's first set-up Ektron through the WorkArea.&lt;/p&gt;
&lt;p&gt;&lt;img class="liquid" src="/imgs/blog/Ektron-Setup.png" alt="Ektron Setup" /&gt;&lt;/p&gt;
&lt;p&gt;You should first go to the configuration screen, and under &lt;strong&gt;"Language Settings"&lt;/strong&gt; you should enable the languages you want your website to be translated into. You enable a language by checking the boxes that are under the green check mark icon.&lt;/p&gt;
&lt;p&gt;It is worth noting that while I'm using the word "language", what we are really selecting is a &lt;a href="http://en.wikipedia.org/wiki/Locale"&gt;locale&lt;/a&gt;. A locale is the association of a language and a country. Locale settings are important due to, for example, the "English" language using different words that represent the same meaning in the US and in UK. The same applies to currency, measurements (&lt;a href="http://en.wikipedia.org/wiki/Metric_system"&gt;metric system&lt;/a&gt;/imperial units/customary units/etc.).&lt;/p&gt;
&lt;h2&gt;Preparing the templates for your multilingual website&lt;/h2&gt;
&lt;p&gt;While most of the translation workflow process will be handled by Ektron, the templates you have created (&lt;a href="http://en.wikipedia.org/wiki/Aspx"&gt;aspx&lt;/a&gt; pages) to display the content on your website will also require preparation to support multilingual content.&lt;/p&gt;
&lt;h3&gt;Important tips about creating templates for website localization&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Content translation expansion:&lt;/strong&gt; Make sure there is enough room for the text to accommodate possible expansion once translated (usually text length could expand up to a 25% of the original), or that the web template was coded in a way that expands or shrinks based on the displayed content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hard-coded text:&lt;/strong&gt; text that it is hardcoded into the web template will not be exported for translation. Having different web templates per language sometimes is not possible. This means that every time you have to make one change to the template you need to apply the same change over and over again for each language. To solve this issue, I would recommend:      
&lt;ul&gt;
&lt;li&gt;Have all hard-coded text extracted into a resource file (that needs to be sent for translation also), or&lt;/li&gt;
&lt;li&gt;Create a "Dictionary" folder within the CMS, setup a simple &lt;strong&gt;SmartForm/XSLT&lt;/strong&gt; that will hold/display the text and then replace all the hardcoded text on the web templates with Content controls that will have their IDs pointing to each entry on the Dictionary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img class="liquid" src="/imgs/blog/Ektron-Dictionary.png" alt="Ektron Dictionary" /&gt;&lt;/p&gt;
&lt;p&gt;The second option has the advantage of letting the Website administrator edit the website text, and also, since the text now is part of the CMS content, it can be exported/imported back by the Website admin.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Localization and images/PDFs/documents&lt;/strong&gt;: These items are not exported for translation. If the images you used on the website do not have any text, this is not a problem. But &lt;a href="http://en.wikipedia.org/wiki/Pdf"&gt;PDFs&lt;/a&gt; or other documents need to be sent separately to the translation company if you need them translated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text direction:&lt;/strong&gt; Ektron handles Left-to-Right (LTR) and Right-to-Left (RTL) text without problems. But you have to tell the browser how you want it to display the text on screen. If you are not translating your website into Arabic/Hebrew/Persian/etc., this is not an issue. But if you are localizing your website into RTL direction for languages like Arabic, you will have to employ some code on the backend that detects the language direction and writes the appropriate "dir" attribute on the html page (dir="rtl"). Also, you may want to add this attribute to a container inside the html page and not to the page per-se. In some browsers, applying a right-to-left direction in the html or body tag will affect the user interface too. If the page has a scroll bar, it will appear on the left side of the window. JavaScript alert boxes may also be mirror imaged. Some speakers of languages that use right-to-left scripts prefer the directionality of the user interface to be associated with the desktop environment, not with the content of a particular document. Because of this, it may be preferable to not declare the document directionality on the html or body tag.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;strong&gt;haracter encoding:&lt;/strong&gt; If a browser is unable to detect the character encoding used in a Web document, the user may be presented with unreadable text. Declaring the character encoding of the web template is important for anyone producing multilingual websites. A Unicode encoding can support many languages and can accommodate pages and forms in any mixture of those languages. Its use also eliminates the need for server-side logic to individually determine the character encoding for each page served or each incoming form submission. This significantly reduces the complexity of dealing with a multilingual site or application. A Unicode encoding also allows many more languages to be mixed on a single page than almost any other choice. Authors are encouraged to use &lt;a href="http://www.utf8.com/"&gt;UTF-8&lt;/a&gt; as the default character encoding when creating templates and use the appropriate meta-tag on each template (&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&amp;gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Page language:&lt;/strong&gt; Declaring the default language is already important for web applications such as &lt;a href="http://www.w3.org/TR/WCAG10/#gl-abbreviated-and-foreign"&gt;accessibility&lt;/a&gt; and search engine optimization (SEO), but many &lt;a href="http://www.w3.org/International/questions/qa-lang-why"&gt;other possible applications&lt;/a&gt; for this information may emerge over time. It is usually very easy to do when creating the content, but more difficult to retrofit later in order to take advantage of language-related features. The easiest way is to declare the language on the HTML tag of your web template (&amp;lt;html lang="en" xml:lang="en"&amp;gt;). It can be overridden for portions of the document as required.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Exporting and translating content&lt;/h2&gt;
&lt;p&gt;&lt;img class="liquid" src="/imgs/blog/Ektron-Export.png" alt="Ektron Export" /&gt;&lt;/p&gt;
&lt;p&gt;Once you have your website ready for translation, you can export the content of the website with a click of your mouse. You select the root folder and from the &lt;strong&gt;"Action"&lt;/strong&gt; menu, select &lt;strong&gt;"Export for translation"&lt;/strong&gt;. Ektron will go through each page on your website, create an XLIFF file ready for translation and compress it with all the other pages in one single ZIP file (per language) that you can download and send for translation.&lt;/p&gt;
&lt;p&gt;Each ZIP file will have a complete copy of your website ready for translation. One feature Ektron has is that you don't need to track which pages you modified/added into the website after the content was translated. Ektron will do that for you and the next time you export the content, only the new pages/changed content will be exported, saving you time and money.&lt;/p&gt;
&lt;p&gt;The content is then translated by a translation agency and sent back to you, again, as ZIP files.&lt;/p&gt;
&lt;h2&gt;Importing back the translated content&lt;/h2&gt;
&lt;p&gt;&lt;img class="liquid" src="/imgs/blog/Ektron-Import.png" alt="Ektron Import" /&gt;&lt;/p&gt;
&lt;p&gt;Once the content has been translated, you need to import back the translated content into the CMS. As with exporting, this operation is as easy as going to the settings and selecting the &lt;strong&gt;"Import XLIFF Files"&lt;/strong&gt; option. After you browsed your machine for the zipped XLIFF files and clicked on the upload button, Ektron will insert back each translated contents under the page/language they belong.&lt;/p&gt;
&lt;p&gt;If you have setup a content approval chain, the newly imported content will be placed as "Checked In" for your web reviewers and/or QA testers to review and approve.&lt;/p&gt;
&lt;p&gt;At this point, your multilingual website is ready. I would always highly recommend running a standard website Quality Assurance process of the site in case any issues surface (i.e., some text may need some adjustments, still having hard-coded text on the templates, etc).&lt;/p&gt;
&lt;p&gt;I hope this article was useful and serves as a starting point to prepare an Ektron based website to support multiple-languages. In my next article I will show you how to create a series of simple controls that you can drop in your templates in order to take care of some common issues with localization.&lt;/p&gt;</summary>
    <published>2010-08-06T18:24:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2010/08/06/Website-Localization-with-Ektron-Web-CMS-Part-1.aspx#comment" />
    <category term="Website Translation" />
    <dc:publisher>CheloXL</dc:publisher>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=2d07fba9-6021-4b95-9ac9-d3e8694496b9</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=2d07fba9-6021-4b95-9ac9-d3e8694496b9</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2010/08/06/Website-Localization-with-Ektron-Web-CMS-Part-1.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=2d07fba9-6021-4b95-9ac9-d3e8694496b9</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2010/06/22/Website-Translation-Website-Localization-and-Website-Internationalization.aspx</id>
    <title>Website Translation, Website Localization and Website Internationalization</title>
    <updated>2010-06-22T22:52:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=51eeb28e-0759-4c67-8dbe-2d69d5e77fac" />
    <link href="http://www.extremefx.com.ar/post/2010/06/22/Website-Translation-Website-Localization-and-Website-Internationalization.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;Many customers new to translation are confused by the terms "translation", "localization" and "internationalization". Although each term describes a distinct process for website projects, translation and localization are often used almost interchangeably. This blog clears up the mystery around these basic concepts.&lt;br /&gt;&lt;br /&gt; Website translation is also known as "Website Globalization". In order to "translate" a website into other languages you may need both Internationalization (I18N) and Localization (L10N) services.&lt;/p&gt;
&lt;p&gt;View complete article here: &lt;a href="http://blog.globalizationpartners.com/website-translation-localization-and-internationalization.aspx" target="_blank"&gt;Website Translation, Website Localization and Website Internationalization&lt;/a&gt;&lt;/p&gt;</summary>
    <published>2010-06-22T22:52:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2010/06/22/Website-Translation-Website-Localization-and-Website-Internationalization.aspx#comment" />
    <category term="Website Translation" />
    <dc:publisher>CheloXL</dc:publisher>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=51eeb28e-0759-4c67-8dbe-2d69d5e77fac</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=51eeb28e-0759-4c67-8dbe-2d69d5e77fac</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2010/06/22/Website-Translation-Website-Localization-and-Website-Internationalization.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=51eeb28e-0759-4c67-8dbe-2d69d5e77fac</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2010/04/30/12-Steps-to-Website-Globalization.aspx</id>
    <title>12 Steps to Website Globalization</title>
    <updated>2010-04-30T19:24:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=5a2596ea-48cb-4fd2-bc84-258d2ee4039d" />
    <link href="http://www.extremefx.com.ar/post/2010/04/30/12-Steps-to-Website-Globalization.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;Whether you are trying to launch a multilingual website to expand your products and services into new global markets or whether you are trying to increase your company's global operational efficiencies by developing multilingual extranets and intranets, website globalization is a requirement to make either a reality. You must translate (globalize) your website to empower your web presence to effectively communicate, conduct and complete international e-commerce.&lt;br /&gt;&lt;br /&gt; Website translation is also known as "website globalization". In order to truly "translate" a website into other languages you may need both internationalization (I18N) and localization (L10N) services.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;View complete article:&lt;/strong&gt; &lt;a href="http://blog.globalizationpartners.com/12-steps-to-website-globalization.aspx" target="_blank"&gt;12 Steps to Website Globalization&lt;/a&gt;&lt;/p&gt;</summary>
    <published>2010-04-30T19:24:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2010/04/30/12-Steps-to-Website-Globalization.aspx#comment" />
    <category term="Website Translation" />
    <dc:publisher>CheloXL</dc:publisher>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=5a2596ea-48cb-4fd2-bc84-258d2ee4039d</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=5a2596ea-48cb-4fd2-bc84-258d2ee4039d</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2010/04/30/12-Steps-to-Website-Globalization.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=5a2596ea-48cb-4fd2-bc84-258d2ee4039d</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2009/03/31/Preconditions-postconditions-checks.aspx</id>
    <title>Preconditions, postconditions checks</title>
    <updated>2009-03-31T19:25:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=cde6e503-9a2c-4edb-bc6e-b61698bfc235" />
    <link href="http://www.extremefx.com.ar/post/2009/03/31/Preconditions-postconditions-checks.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;How many times you found yourself writing preconditions before executing some code (like argument validation) and post-conditions (validating some result before returning the value/using on another function)?&lt;/p&gt;
&lt;p&gt;So, for example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if (arg == null) throw new ArgumentError("arg can not be null");&lt;br /&gt;if (!(arg is IInterface)) throw new ArgumentError("arg must be of type IInterface");&lt;br /&gt;....&lt;br /&gt;if (ret == null) throw new Error("Something went wrong!");&lt;br /&gt;&lt;br /&gt;return ret;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s good practice, but when you have to validate several conditions the code starts to look messy. For that reason, I created a couple of helper classes that takes cares of the job, providing a nice fluent typing.&lt;/p&gt;
&lt;p&gt;Pre-conditional checking examples:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;requiresNumber(pIndex, "pIndex").isLessThan(_size);&lt;br /&gt;requires(pCollection, "pCollection").isNotNull();&lt;br /&gt;requiresString(pKey, "key").isNotNullOrEmpty();&lt;br /&gt;requires(pValue, "value").isNotNull();&lt;br /&gt;requires(pNode._parent, "node").isNotSameAs(this, "You cannot attach a node to itself").isTypeOf(TreeNode);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Post-conditional checking examples:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ensuresBool(ExternalInterface.available, "ExternalInterface is not available.").isTrue();&lt;br /&gt;ensures(_entries[pOldKey]).isNotNull("Key ["+pOldKey+"] does not exists.");&lt;br /&gt;ensuresNumber(days).isLessOrEqualThan(10675199, "Invalid number of days: "+days);&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;Usage&lt;/h6&gt;
&lt;p&gt;You have 6 specific conditional checks (Array, Boolean, Date, Number, String) and one general. You access the conditionals by using either the requires[Type] functions or ensures[Type] functions.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;requires&amp;rdquo; functions requires at least one parameter: the value you want to check. You can also pass a second parameter that represents the &amp;ldquo;name&amp;rdquo; of that value (you usually use &amp;ldquo;requires&amp;rdquo; to validate method arguments).&lt;/p&gt;
&lt;p&gt;The conditions may have different number of parameters (depending on what are you checking). The last one is an additional string you may want to attach to the error description.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;ensures&amp;rdquo; functions are similar to &amp;ldquo;requires&amp;rdquo;. Ensures needs at least one parameter (the value). The second argument is an additional message you may want to attach to the complete validation process, and the third one is the &amp;ldquo;name&amp;rdquo; of the variable you are checking.&lt;/p&gt;
&lt;p&gt;This library is part of my flash framework. You can download it from &lt;a href="http://code.google.com/p/efxflashsource/"&gt;Google Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; There is a bug on the FlexSDK4 that does not let me compile the full library as a .swc, nor create the documentation (If you are interested: &lt;a href="http://bugs.adobe.com/jira/browse/SDK-20251"&gt;bug&lt;/a&gt;). You have to download the library from the SVN repository. I will post a new ZIP file when the bug gets fixed.&lt;/p&gt;</summary>
    <published>2009-03-31T19:25:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2009/03/31/Preconditions-postconditions-checks.aspx#comment" />
    <category term="Flash" />
    <dc:publisher>CheloXL</dc:publisher>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=cde6e503-9a2c-4edb-bc6e-b61698bfc235</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=cde6e503-9a2c-4edb-bc6e-b61698bfc235</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2009/03/31/Preconditions-postconditions-checks.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=cde6e503-9a2c-4edb-bc6e-b61698bfc235</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2009/03/27/Method-overloading-in-flash.aspx</id>
    <title>Method overloading in flash</title>
    <updated>2009-03-27T15:43:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=0bbd29c5-95e4-4548-9495-c683d93710ad" />
    <link href="http://www.extremefx.com.ar/post/2009/03/27/Method-overloading-in-flash.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;As you may already know, it is not possible to have the same method with different signatures in flash (also known as method overloading).&lt;/p&gt;
&lt;p&gt;For example, on c# you may have the same function that does different things depending on the argument count / arguments types. The only limitation is that you can not have a method with the same signature (and different return type, for example).&lt;/p&gt;
&lt;p&gt;So, this are perfectly valid method declarations:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class Datetools {&lt;br /&gt;    public function minus (date:Date):Timespan {        ....    }&lt;br /&gt;    public function minus (span:Timespan):Date {        ....    }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the compiler then chooses the right one based on usage.&lt;/p&gt;
&lt;p&gt;Now, how to do this in actionscript? The most used method is to add a switch/if statement inside the function and try to match the parameters. It is not only cumbersome but also hard to maintain.&lt;/p&gt;
&lt;p&gt;So, using a little of black magic here and there, I present here my method overloader class.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;package extremefx.tools {	&lt;br /&gt;	/**&lt;br /&gt;	* @author Marcelo Volmaro&lt;br /&gt;	*/&lt;br /&gt;	public final class Overloader {&lt;br /&gt;		private var _methods:Object;&lt;br /&gt;		public function Overloader(pTarget:Object, pFnc:String) {&lt;br /&gt;			_methods = {};&lt;br /&gt;			pTarget[pFnc] = _exec;&lt;br /&gt;		}&lt;br /&gt;		public function overload(pFunction:Function, ...args):void {&lt;br /&gt;			_methods[args.join("")] = new Fnc(pFunction, args);&lt;br /&gt;		}&lt;br /&gt;		public function unoverload(...args):Boolean {&lt;br /&gt;	    		return delete _methods[args.join("")];&lt;br /&gt;		}&lt;br /&gt;		private function _exec(...args):* {&lt;br /&gt;			var l:int = args.length,&lt;br /&gt; 			h:String = "",&lt;br /&gt;			theF:Fnc;&lt;br /&gt;			for(var i:int = 0; i &amp;lt; l;i++){&lt;br /&gt;				if (args[i] == null) continue;&lt;br /&gt;				h += args[i].constructor;&lt;br /&gt;			}&lt;br /&gt;			//an exact match was found, use this.&lt;br /&gt;			if ((theF = _methods[h])) return theF.f.apply(null, args);&lt;br /&gt;			var bestMatch:int = -1,&lt;br /&gt;			fnc:Function = null;&lt;br /&gt;			for each(theF in _methods){&lt;br /&gt;				if (theF.l != l) continue;//match number of arguments&lt;br /&gt;				var m:int = 0;&lt;br /&gt;				for (var j:uint = 0; j &amp;lt; l; j++){&lt;br /&gt;					if (args[j] is theF.a[j]) m++;//find out which method has the best match&lt;br /&gt;				}&lt;br /&gt;				if (m &amp;gt; bestMatch){&lt;br /&gt;					bestMatch = m;&lt;br /&gt;					fnc = theF.f;&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;			return (fnc == null) ? null : fnc.apply(null, args);&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;final class Fnc {&lt;br /&gt;	public var f:Function;&lt;br /&gt;	public var a:Array;&lt;br /&gt;	public var l:uint;&lt;br /&gt;	public function Fnc(pF:Function, args:Array){&lt;br /&gt;		f = pF;&lt;br /&gt;		a = args;&lt;br /&gt;		l = args.length;&lt;br /&gt;	}&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;How to use?&lt;/h6&gt;
&lt;p&gt;Simple. You need to instantiate a new Overloader class, passing as arguments the target object and the name of the function you want to overload. The overloaded function must be defined as a variable of type &amp;ldquo;Function&amp;rdquo;. The Overloader class will assign then the method that will check for arguments and calls the appropiate function.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function main():void {&lt;br /&gt;	var o:Overloader = new Overloader(this, "testFnc");&lt;br /&gt;	o.overload(_testO1, String);&lt;br /&gt;	o.overload(_testO2, String, Boolean);&lt;br /&gt;	o.overload(_testO3, Number);&lt;br /&gt;	o.overload(_testO4, Function, Number);	o.overload(_testO5, DummyTest, Number);&lt;br /&gt;	trace(testFnc("A String"));//A String&lt;br /&gt;	trace(testFnc("A String", true));//A String:true&lt;br /&gt;	trace(testFnc("A String", false));//A String:false&lt;br /&gt;	trace(testFnc(123.456));//123.456&lt;br /&gt;	trace(testFnc(_testO1, 123.456));//Function plus:123.456&lt;br /&gt;	trace(testFnc(this, 123.456));//Class [object DummyTest] plus:123.456&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function _testO1(pString:String):String {&lt;br /&gt;	return pString;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function _testO2(pString:String, pBool:Boolean):String {&lt;br /&gt;	return pString + ":"+ pBool;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function _testO3(pNumber:Number):Number {&lt;br /&gt;	return pNumber;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function _testO4(pFunction:Function, pNumber:Number):String {&lt;br /&gt;	return "Function plus:"+pNumber;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function _testO5(pClass:DummyTest, pNumber:Number):String {&lt;br /&gt;	return "Class "+pClass+" plus:"+pNumber;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public var testFnc:Function;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&amp;rsquo;d tried to make it bulletproof. If the specified parameter combination does not exist on the registered function list, the overloader will try to find out the best match from all the available functions, or at least one of the available functions. Please note that since flash player does runtime checking on the argument types, an exception may be thrown if the player can not do a type convert on the arguments (int, uint and numbers are convertibles, for example).&lt;/p&gt;
&lt;p&gt;Hope you like it and as always, comments are welcomed!.&lt;/p&gt;</summary>
    <published>2009-03-27T15:43:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2009/03/27/Method-overloading-in-flash.aspx#comment" />
    <category term="Flash" />
    <dc:publisher>CheloXL</dc:publisher>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=0bbd29c5-95e4-4548-9495-c683d93710ad</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=0bbd29c5-95e4-4548-9495-c683d93710ad</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2009/03/27/Method-overloading-in-flash.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=0bbd29c5-95e4-4548-9495-c683d93710ad</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2008/04/21/Flash-internationalization-library.aspx</id>
    <title>Flash internationalization library</title>
    <updated>2008-04-21T19:37:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=ce9b6f86-3ce6-4cf5-94de-96fa5730876e" />
    <link href="http://www.extremefx.com.ar/post/2008/04/21/Flash-internationalization-library.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;p&gt;This library will help you to internationalize your flash application. It supports localization of numbers, date/time, percentages and strings. It can also parse back numbers and date/time formats on a specific locale into flash internal formats.&lt;/p&gt;
&lt;h4&gt;Details&lt;/h4&gt;
&lt;p&gt;Most of the code is well documented. I choose to follow the .net c# conventions for formatting as is the one I use the most.&lt;/p&gt;
&lt;p&gt;There is also a resource management class that will let you manage language-specific resources, like strings and bitmaps. The resource manager uses the standard XLIFF format and it supports trans-unit nodes as well as bin-unit nodes.&lt;/p&gt;
&lt;p&gt;Bin-unit nodes can have external or internal content. External content can be anything that flash supports natively like text files, xml, sound, video and images. External content will be loaded at runtime after the XLIFF file is parsed.&lt;/p&gt;
&lt;p&gt;Internal content can only be images.&lt;/p&gt;
&lt;p&gt;The library also supports text pluralization. For the library to know a string is a pluralized string, the string &amp;ldquo;[I18N]&amp;rdquo; must precede the list of pluralization&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;ex: [I18N]|{0} file deleted.|{0} files deleted.&lt;/p&gt;
&lt;p&gt;The number of plurals will depend on the language. Most languages uses two forms, singular used for one only, but other languages have more that one plural form (and others, like some of the Asian family, have no distinction between the singular and plural form).&lt;/p&gt;
&lt;p&gt;For example, Polish uses e.g. plik (file) this way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0 plik&amp;oacute;w&lt;/li&gt;
&lt;li&gt;1 plik&lt;/li&gt;
&lt;li&gt;2-4 pliki&lt;/li&gt;
&lt;li&gt;5-21 plik&amp;oacute;w&lt;/li&gt;
&lt;li&gt;22-24 pliki&lt;/li&gt;
&lt;li&gt;25-31 plik&amp;oacute;w&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and so on. Plural forms must be sorted like in real life. So, the singular first (if exists) and then the plurals.&lt;/p&gt;
&lt;p&gt;In the zip package there is a demo application that uses all the features the framework has. Please check that demo and the documentation for more information.&lt;/p&gt;
&lt;h4&gt;TODO / Missing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Calendars: Gregorian calendar and all its derivated works (Japanese, Julian, Korean, Taiwan, ThaiBuddhist). All the Lunar Calendars do not. Also, the UmAlQuraCalendar it is not implemented at all.&lt;/li&gt;
&lt;li&gt;HijriCalendar: Again, I implemented the algorithm, but I&amp;rsquo;m not sure if it works correctly. Need to check  how the addHijriDate parameter works, if this parameter is the same as hijriAdjustment in .net, and if the calendar works at all.&lt;/li&gt;
&lt;li&gt;Native digits on the NumberFormatInfo is implemented but currently the system does not replace digits on the output string. Need to check with someone that knows Arabic on how this works.&lt;/li&gt;
&lt;li&gt;Collation tables (tables used for correct string sorting based on the language sorting rules) are not implemented. Not sure if I will be able to implement this feature, as they are pretty big. The collation table for the Japanese language only is a 9mb binary file.&lt;/li&gt;
&lt;li&gt;Bi-Di algorithm (have a rought version working, need to test against all the test cases).&lt;/li&gt;
&lt;li&gt;Inline node parsing on XLIFF files (to correctly handle inline tags, like bold, italic, links, etc).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source code and downloads at: &lt;a href="http://code.google.com/p/efxflashsource"&gt;GoogleCode&lt;/a&gt;&lt;/p&gt;</summary>
    <published>2008-04-21T19:37:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2008/04/21/Flash-internationalization-library.aspx#comment" />
    <category term="Flash" />
    <dc:publisher>CheloXL</dc:publisher>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=ce9b6f86-3ce6-4cf5-94de-96fa5730876e</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=ce9b6f86-3ce6-4cf5-94de-96fa5730876e</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2008/04/21/Flash-internationalization-library.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=ce9b6f86-3ce6-4cf5-94de-96fa5730876e</wfw:commentRss>
  </entry>
  <entry>
    <id>http://www.extremefx.com.ar/post/2007/09/10/Flashxed.aspx</id>
    <title>Flashxed</title>
    <updated>2007-09-10T12:45:00+00:00</updated>
    <link rel="self" href="http://www.extremefx.com.ar/post.aspx?id=f7564479-9655-499b-8c29-3bbfd24b8456" />
    <link href="http://www.extremefx.com.ar/post/2007/09/10/Flashxed.aspx" />
    <author>
      <name>CheloXL</name>
    </author>
    <summary type="html">&lt;h3&gt;How to play:&lt;/h3&gt;
&lt;p&gt;Flashxed is a puzzle game in which your goal is to move similar blocks together, which causes them to disappear. Once all the blocks are gone, you&amp;rsquo;ve solved the level and you&amp;rsquo;re presented with a new level to solve. You move blocks by pressing the mouse on them and dragging to either the right or left. If an empty space is encountered, &amp;ldquo;gravity&amp;rdquo; takes over and the blocks fall towards the bottom.&lt;/p&gt;
&lt;p&gt;&lt;a href="\"&gt;PLAY NOW!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Many thanks to &lt;/strong&gt;&lt;strong&gt;Martin&lt;/strong&gt;&lt;strong&gt; who provided me with the web-space necessary to host the game!.&lt;/strong&gt;&lt;/p&gt;</summary>
    <published>2007-09-10T12:45:00+00:00</published>
    <link rel="related" href="http://www.extremefx.com.ar/post/2007/09/10/Flashxed.aspx#comment" />
    <category term="Flash" />
    <category term="Games" />
    <dc:publisher>CheloXL</dc:publisher>
    <pingback:server>http://www.extremefx.com.ar/pingback.axd</pingback:server>
    <pingback:target>http://www.extremefx.com.ar/post.aspx?id=f7564479-9655-499b-8c29-3bbfd24b8456</pingback:target>
    <slash:comments>0</slash:comments>
    <trackback:ping>http://www.extremefx.com.ar/trackback.axd?id=f7564479-9655-499b-8c29-3bbfd24b8456</trackback:ping>
    <wfw:comment>http://www.extremefx.com.ar/post/2007/09/10/Flashxed.aspx#comment</wfw:comment>
    <wfw:commentRss>http://www.extremefx.com.ar/syndication.axd?post=f7564479-9655-499b-8c29-3bbfd24b8456</wfw:commentRss>
  </entry>
</feed>

