Localizing an addon Blizzard releases many localized versions of the World of Warcraft client , each version translating the game to a particular language . Players in some regions may also install additional language packs , allowing them to play World of Warcraft in a desired language . Depending on the functionality they provide to the player , addons may need to be " internationalized " in order to work on clients that use a different locale than the addon author ' s , and " localized " in order to present themselves to the user in the user ' s desired language . Internationalization . The World of Warcraft API stays consistent across all client localizations - - all the normal API functions are available regardless of the client ' s locale . This should in theory enable any addon to run on any WoW client ; however if the addon relies on the names of spells , abilities , NPCs , items , professions , or even the text or format strings of system messages , it may not function properly when those are translated to another language . There are three main approaches to solving this problem : You may also be able to recognize system messages without requiring explicit localization of your string patterns by deriving the patterns from the format strings found in FrameXML / GlobalStrings . lua . This is slightly complicated by the fact that some languages may use the " % 2 $ s % 1 $ s " syntax to change the order in which format arguments appear in the string ; you may wish to consider using LibDeformat - 3 . 0 to perform that conversion automatically . In summary , to avoid your addon malfunctioning when run on a client of another locale , avoid using hard - coded text to identify spells , items or NPCs the names of which would be localized by the client , and be mindful of using the order of return values for some functions that return lists of names ( as those tend to be in alphabetical order , which may vary with localization ) . A word on return value ordering . Some API functions that return lists or take indices internally sort their data alphabetically . When the client is localized , the order of returned values or correspondence between return values and indices may change . Examples of this behavior would include the character ' s spellbook ( where the spells are alphabetically sorted within each school ) and the list of zones on a particular continent ( zones are alphabetically sorted in the returned list ) . It would be dangerous to rely on the order of those return values alone . Localization . If a player is using a localized client , they would presumably also want addons to be localized to that language . To accomplish this , all text presented to the user should be translatable ; this section discusses strategies for addons to support localizations , and simplify creation of new localizations . Title : Gatherer Localization in the . toc file . Title - frFR : Gatherer ( en Francais , in French ) Making an addon localizable . To begin with , you need to ensure that every time your addon displays a piece of text to the user , that piece of text " can " be localized . Consider the two pieces of code below : Code on the left could not be localized without editing the file containing it ; while the code in the right wraps the output in a table lookup - - so if the value associated with the " Hello World ! " key in MyLocalizationTable was altered , the text output would change . We can use a metatable to allow you to write localizable code without worrying about supplying a default localization : This method allows you to add an easy localization mechanism to your addons , requiring minimal additional code . Adding translations . Suppose we then wanted to translate the " Hello World ! " string from the example above to the client ' s language . The locale of the client is returned by ( ) . To add localizations to the addon , we could add new files along the lines of the following : To run correctly , those localization files need to be loaded after MyLocalizationTable is created , but before localization is actually used . Character Encoding in World of Warcraft . World of Warcraft supports UTF - 8 encoded strings of unicode characters ; in UTF - 8 encoding , ASCII characters can be represented using 1 byte , while most unicode characters typically require multi - byte sequences . You can simply use a UTF - 8 enabled text editor , and save unicode - containing . lua files using UTF - 8 encoding . Alternatively , you can manually encode the multi - byte sequences required by UTF - 8 using Lua escape sequences . The table below shows escape sequences for some european characters : If you don ' t know the UTF - 8 sequence for a particular character , you can compute it from the unicode character code , or by looking up the desired character online . Check the GlobalStrings . lua . Some strings , particularly those used by Blizzard in FrameXML , are already localized by the client . You can view the full list of such strings by reading the FrameXML / GlobalStrings . lua file . An Example . The addon below displays a message every time the PLAYER _ ENTERING _ WORLD event fires . The message is localized according to the client localization ; new locales can be added relatively easily by duplicating the localization . de . lua file .