Planet supports development of internationalised systems. It guides on development process, high-level design, and detailed software design.
This paper, presented at Interact 2001, motivates and summarises the language.
_________________________________________________________________________________
How can you allocate resources at a level befitting the needs of each culture, and at the same time ensure that no more attention than necessary is devoted to any particular culture?
In most businesses, interaction with the marketing department will be essential. When considering attractiveness of foreign markets, consider size and value of customer demand, competitive importance of the market, and availability of expertise [28].
At this stage, establish the importance each culture places on different aspects of software. For instance, an empirical study by Evers and Day [11] found that Indonesian subjects, compared with Chinese subjects, were more attracted towards usability than certain other qualities (It must be acknowledged that such studies represent a generalisation, since, in this case, there is much diversity within the Chinese and Indonesian cultures. The study nevertheless supports the argument that perceived importance of software attributes is culture-dependent.). Since you cannot maximise every quality, this kind of information will tell you which areas to focus on for a given culture. Empirical studies can obviously not be conducted for each culture, but there are certain cues which will enable a rough guess. To understand the importance a culture places on different software features:
Uren et al. [34] suggest that marketing staff should develop a list of target countries, even if translation is not immediately required. Luong et al. [22] suggest that developers need to decide between a full localisation and a partial localisation, and also consider whether to ship overseas simultaneously with the local release.
Note: For the remainder of this paper, the cultures mentioned in the Export Schedule are referred to as Target Cultures.
_________________________________________________________________________________
How do you support development decisions which depend on information about specific cultures?
The culture model can also include issues regarding the development process. Luong et al. [22] discuss the English-language ability of the quality assurance engineers they deal with in Japan. Another culture-dependent process is user testing; some cultures appear to be more reluctant than others to criticise a product [16].
Luong et al. [22] provide details on localising for Asia. Numerous business texts describe the intricacies of doing business with, or creating products for, a particular country [18] or region [9].
_________________________________________________________________________________
How do you represent all relevant information about each culture in a form which supports internationalisation processes?
There are many potential sources for culture models. These include literature reviews, comments from local branches or consultants, results from requirements elicitation and user interviews, and observations of the system in action.
If desired, divide the dimensions into categories. For instance, Mahemoff and Johnston [23], following a suggestion by Yeo [36], discuss two broad categories — overt and covert factors. The former are obvious, tangible factors (e.g. date format), whereas the latter are ill-defined and potentially controversial. Overt factors can further be divided into several categories: time, language, writing, measures, formatting, and external systems (Table ??). Covert factors are composed of mental approach, perception, social rules, and usage context (Table ??). The overt factors could provide a valid starting point for your metamodel. The covert factors are more abstract and in need of refining before they are placed into a repository. For example, the Perception factor indicates icons should be chosen according to cultural understanding. Instead of including a broad “Perception” factor, it would be worthwhile storing a field for each major icon type you are likely to need. For instance, a “Mailbox Appearance” field if your software provides email. With all of these factors, you will need to filter them according to your organisation’s needs.
If cultures are classified according to the same dimensions, then it is also easy to see where they are alike and where they vary.
Is it overly simplistic to characterise a culture as merely a set of key-value pairs? This depends on how the model is used. While the approach does not lead to a highly cohesive view of a culture, it is certainly a practical way to enable people to use and update a model. Also, Hoft [17] discusses a number of metamodels, all resembling this pattern; each lists several factors by which cultures vary. They mainly vary in the ways they classify the factors, and the amount of attention paid to interaction among the factors.
To avoid oversimplification, the value for each field can be a discussion of options, e.g. for units of distance in America, imperial units are used in some contexts and metric units in other contexts.
POSIX has a standard way to define a locale, according to ordering of characters, output formats, message strings, etc [37]. Java’s Locale class and other libraries provide ways for a developer to identify a resource (WelcomeIcon), and then show how it relates to each supported locale (Hello.jpg, Bonjour.jpg). There is a similar framework available for C++ [21].
_________________________________________________________________________________
How can a collection of culture models be organised in a manner which is useful for software projects?
The following guidelines make it easy to access information in the repository:
The following guidelines make it easy to update the repository:
Large repositories can group Culture Models together, e.g. according to continent. This approach can follow the Composite pattern [13], e.g. a model of Europe contains its own information and also contains child models (France, Italy, etc.). When a user looks up a model, information about its ancestor models are also shown.
The concept of grouping cultures serves a couple of purposes. Firstly, it emphasises commonalities among similar cultures, more so than if both cultures had separate, identical, entries. Secondly, there is obviously a great practical benefit: it prevents the need to create and maintain duplicated entries.
Ito and Nakakoji have prototyped a system for retrieving culture-specific details [19].
The authors are currently undertaking a project to build a web-based repository. The intention is that developers and users from around the world will use and contribute to the database.
_________________________________________________________________________________
How can you create software which is flexible enough to meet the needs of culturally-diverse users?
The user can then mix cultures by choosing forms of features which have been created with different cultures in mind, e.g. an American can leave text in English, but select a European paper format.
Sometimes, it is impractical to provide all forms of all features. This may be due to space constraints, downloading times, or commercial considerations. In these cases, it is tempting to produce a separate version for each culture. However, a better solution is to keep the software flexible, so that users can add and remove the forms pertaining to a particular culture.
Unicode, supported in HTML 4.0, is a text format containing characters from every major alphabet in the world. This allows information pertaining to various cultures to be manipulated by the same application.
_________________________________________________________________________________
How do you ensure the software performs the functions that are meaningful and useful to people from different cultures?
Break the requirements phase into several smaller stages, where each stage consists of creating and/or refining a small set of related requirements. This way, you can progress incrementally, so that each stage can take into consideration the cultures mentioned in the Export Schedule. At each stage, consider the impact on the target cultures. Some cues which might suggest culture is an important factor include:
This process may generate new questions about cultures which the repository should be consulted to solve. If it cannot solve them, seek the most important answers by alternative means (e.g. interviews with domain experts) and update the repository. Once the answers to these questions are known, you will be in a better position to refine the requirements. Your initial idea for a requirement may form the basis of a suitable default (a Universal Default), but you may need to extend it to satisfy all target cultures.
Sometimes, a standard function is undesirable or not worth the effort. Japanese dates are stored according to the number of years of the present Emperor’s reign. Lotus learned that a feature allowing users to return the year back to zero was offensive, because it implied the Emperor’s mortality, and removed the feature [12]. Another Japanese example is the suggestion that Japanese users prefer planning ahead instead of trial-and-error [19]. There may be a case for scaling down the Undo function, or not implementing it at all, if a large proportion of users are Japanese.
Currency differences can lead to complicated functionality, especially when conversions are required. The introduction of the Euro is a familiar example. A more complicated example is the currency recorded for transactions. Some countries denominate imports in their own currencies, while other countries denominate imports in US dollars.
Nielsen discussed a French educational product which enables teachers to annotate poems [27]. He noted that in some countries, it would more appropriate to give students the same ability. The decision to include this kind of functionality rests on cultural values such as attitudes to learning and authority.
_________________________________________________________________________________
How do you create a user-interface which can be used easily and effectively by all targeted cultures?
The precise details about what information you are presenting, and how it is arranged will not become clear until the localisation phase. Therefore, develop an elastic user-interface so that the user-interface is not fixed during the internationalisation phase.
As with Flexible Function, break the user-interface specification process into several stages, so that you can plan each subsequent stage in the light of the cultures being targeted.
Two general guidelines apply:
According to the Slinky meta-model [8], it is possible to split user-interface, human-computer dialogue, and functional core. Architectures based on Slinky should provide adequate support for developers who wish to create Elastic User-Interfaces. Coldewey’s “User Interface Software” pattern language also covers separation of user-interface and domain [6].
The initial website for some browsers depends on the region of the software.
The web supports various layouts. Horizontal orientation of layout (e.g. whether links are on left or right) is correlated with the orientation of text in the originating country [2]. It is worth noting, though, that an individual site generally does not provide more than one layout.
_________________________________________________________________________________
The Online Repository can be consulted for guidance. If it proves insufficient, investigate further and remember to feed results back in to the repository for future use.
Many elements will have a common instantiation for an entire group of cultures. This is where the idea of composite cultures discussed in the Online Repository can be useful. For instance, a group of cultures called “English-language” can share the same text (of course, this would be a compromise because it is preferable to have “USA-English”, “Australian-English”, etc.). Such a grouping system would need to be many-to-many rather than strictly hierarchical, i.e. a country such as England might belong to several groups, e.g. “English-Language”, “Commonwealth”, “Great Britain”.
The Online Repository can help to identify features which are misleading or offensive. However, user testing is also essential since people from external cultures can overlook this kind of problem. In marketing, there are countless examples of brand-names and advertisements which were actually used, despite the fact that any lay-person could see the folly, such as products named after swear-words and products with unwanted functions (many examples are described by Meloan [25]).
The culture-specific partners of the Yahoo! website are another example. They are organised in the same way as their parent, but contain information specialised to their culture, such as weather for certain cities and status of local stockmarkets.
Java’s MessageFormat class allows programmers to specify a culture-specific format without committing to precise data. An English format can be “subject-verb-object”, while a Japanese format can be “subject-object-verb”. Then, only a single statement identifying the subject, object, and verb, is required. This avoids having two print statements whenever a message is generated.
_________________________________________________________________________________
How do you optimise resources when there are many features (functions, user-interface arrangements, user-interface elements), each of which depends on a wide cross-cultural base?
The following guidelines will help when creating universal defaults:
For organisation-specific Online Repositories, it may be useful to include a “Universal” Culture Model in the Online Repository. This would contain organisation-wide defaults. Such a model would be less useful for a repository shared by the overall community.
Some icons and metaphors from popular software paradigms are well-understood in different cultures. Web browsers often use left and right navigation arrows. Word-processors and painting programs use a blank page to represent a new document and scissors for cutting. Help is often represented by a question-mark.
_________________________________________________________________________________
How do you handle configuration of features which are culture-specific?
An additional benefit is that users can dynamically switch between cultures. This may be of use when two people share the same application. It can also be useful to some users who work in different “culture modes”. Some people think in one language while they work, but think in their own language during recreation. The phenomenon of “code-switching”, i.e. alternating between languages, is common when someone has acquired technical skills in a foreign language [14]. Many people in multinational firms may work with software in English, but perform personal functions such as online banking and email in their native languages.
The Dell website [7] has different pages depending on country of origin. Various settings then relate to the country, e.g. support phone numbers, available purchase items.
_________________________________________________________________________________
How can the program determine the appropriate settings for a given user?
When a user specifies or re-specifies their culture, this has the effect of re-setting culture-specific settings.
It may be possible to obtain the user’s culture from the external environment — by querying the operating system or a related product. Use such data as a first guess and confirm with the user on first usage. For instance, if you present a menu of cultures, initially select the best guess.
There will need to be a mapping from each Citizen ID to a particular Cultural Profile. A one-to-one mapping is possible, but it will often not be practical. For example, Canada and USA might have the same Cultural Profile. The operating system might identify users by their country, but this will need to be mapped to the same Cultural Profile.
Websites often let the user click on a flag or some text to set their language preferences. Alvarez et al. [1] designed a bilingual website which only contains links to the other language from each language’s homepage. Since the user is not likely to change languages, this strategy optimises screen real estate.
_________________________________________________________________________________
How do you avoid stereotyping users?
_________________________________________________________________________________
In some respects, this is like Cultural Profile, which also maps one choice to a number of predefined preference values. However, this pattern relates to subsets of the preferences rather than the overall preference vector. Furthermore, the direct nature of the group is often culture-neutral. For instance, a setting of “I like Warm Colours” might lead to orange buttons, red menus, and yellow backgrounds. This is a choice relating to the user’s favourite colour scheme rather than the user’s culture. Of course, there is still an indirect relationship because certain cultures like certain colours. For this reason, it is useful for the Cultural Profile to contain pre-set Preference Groups. In this example, there will be a “ColourScheme” preference group object relating to warm colours, i.e. a ColourScheme object with the following settings: “Button=orange”, “Menu=red”, and “Background=yellow”. An alternative ColourScheme object might be a cool colour scheme. We can then decide on a default ColourScheme for each culture. For instance, we might reference the warm ColourScheme object as the ColourScheme in the Australian Cultural Profile. If we later decide Americans also like the warm colour scheme, we can refer to the same object in the American Cultural Profile. This is preferable to manually defining the colours for each widget type for two reasons: (a) there is less effort, since the colour scheme has already been defined; (b) the “ColourScheme” Preference Group contains semantic knowledge (i.e. American interfaces default to warm colours) which would not be conveyed if only the individual widget colours were defined.
Sometimes the user can reach inside the group and set individual variables. This might make sense in the colour example, e.g. the user might prefer a different button colour. This is still possible. Other times, the user would be unlikely to change variables inside a Preference Group. If the Preference Group represents translated text messages, the user would likely have no desire to tailor these.
The example application, Critique, in Chapter ?? contains an “Evaluation Style” preference. This determines how a score is calculated and what data the user sees; the user only sees data which affects the score. There are two views and two score algorithms, leading to four possible combinations. However, a design decision was made to couple these preferences via the group mechanism, so that only two of the four combinations are possible.
_________________________________________________________________________________
The format of the data should enable easy translation to localised formats, if necessary. It is usually okay to store data in the format of a well-supported culture, or the developer’s culture. A word-processor can store page width in inches and convert to centimetres when necessary (although some caution must taken to prevent problematic rounding errors).
If conversion is difficult, the information must be stored in an abstract format. With text messages, for example, it is messy for the entire message to be stored in English. A translator must then perform string comparisons to determine the appropriate local variant. If the English ever changes, all of the localised code must be updated. Instead, such information can be stored as message IDs.
Critique uses the ArtModel class (Figure 1. It stores imageFile and ratings, two core objects which are necessary for all cultures.
In the Vim text editor [35], implemented in C, users can edit in more than one window. The buffer data structure stores data relating to the text being entered, independent of user interactions. Data stored includes: the text itself, pathname of corresponding file, “dirty” flag (i.e. whether the current text differs from the corresponding file).
Universal Natural Language [33] is an ambitious attempt by the United Nations University to provide “a digital metalanguage” for representing information in a language-independent way. Once it is completed, it would form an ideal format for storing messages in a locale-independent manner.
Large-scale e-commerce websites use a database to track their inventory and keep information about manufacturers, recommendations, and so on. This database is a Global Data Model which can be queried by localised websites.
_________________________________________________________________________________
How do you keep track of the parameters which a user can change?
The nature of preference values will vary widely. They may be a string representing some natural-language text, an image for a logo, or even a reference to a database table. Therefore, you will need to adopt a suitably flexible mechanism for your programming language.
Since some preferences may form a Preference Group, this may be a recursive class. For example, you may have a message preference dictionary inside a global preference dictionary. The message preference dictionary will contain numerous text strings (e.g. English words), but because the entire dictionary is stored as a single reference (“English Dictionary”), all of the strings inside it can be switched to a new language (e.g. to French words) simply by switching the reference to a new dictionary (“French Dictionary”).
Java’s ResourceBundle class is used by Critique for all preferences. The PreferenceDialog sets the preferenceBundle object, and it is then sent to the ArtModel, which propagates it to the view. The preferenceBundle is a dictionary with five keys (Figure 2).
|
In Java, the default values are also specified in the ResourceBundle. Thus, the main code for preferenceBundle is as follows (the structure from the ResourceBundle is adapted from the Java internationalisation tutorial [5]:
public Object[][] contents = { { "BackgroundColor", new Color(200,200,255)}, { "FontFamily", new String("Courier")}, { "MessageBundle", new MessageBundle_en()}, { "EvaluationBundle", new EvaluationBundleEveryone()}, { "NumberFormat", NumberFormat.getInstance(new Locale("en","US"))} }; public Object[][] getContents() { return contents; } |
ResourceBundle preferenceBundle = ResourceBundle. getBundle("critique.PreferenceBundle",currentLocale); Font frenchFont = preferenceBundle.getObject("FontFamily"),Font.BOLD,30)); ResourceBundle messageBundle = (ResourceBundle) preferenceBundle.getObject("MessageBundle"); String scoreMessage = (String) messageBundle.getObject("Score"); |
The Vim text editor [35] has dozens of options, including culture-related options such as right-left editing and alternative keymaps. From the user’s perspective, these are defined in the same context as all other options, and therefore follow the Integrated Preferences pattern. At the code level, the options are mixed with other options in a global options file:
#ifdef RIGHTLEFT EXTERN int p_ari; /* 'allowrevins' */ EXTERN int p_ri; /* 'revins' */ #endif #ifdef CMDLINE_INFO EXTERN int p_ru; /* 'ruler' */ #endif |
_________________________________________________________________________________
How do you support Cultural Profiles?
The software will then be as specific as it needs to be. If some cultures do not care about background colour, simply leave it unspecified in their Preference Dictionary. The default background colour will be chosen, and a single change to that parameter will then propagate all cultures for which background colour needs no tailoring. For some parameters, it is fine if no culture-specific preferences are provided; these are culture-neutral preferences.
As mentioned in Online Repository cultures in the repository can be related to each other in a recursive manner. If desired, you can extend this concept to a hierarchical view of cultures, in which you progressively become more detailed. For instance, a French-Canadian user could use whatever French-Canadian preferences in the first instance, followed progressively by Canadian, then North American, then global. An alternative way to view this situation is to consider the algorithm for determining French-Canadian preferences: Begin by setting current preferences to global preferenceBundle. This preferenceBundle should define settings for each variable. Then, for all of the variables which are specified in the North American preferenceBundle, set the current preferences to these variables. Do the same for the Canadian preferenceBundle, then the French-Canadian preferenceBundle. The current preferences will therefore end up as specific to French-Candadian culture as possible.
Critique supports French and English locales. The English preferenceBundle overrides the default MessageBundle and EvaluationBundle, while the French preferenceBundle overrides MessageBundle, EvaluationBundle, and also BackgroundColor for demonstration purposes:
public Object[][] contents = { { "BackgroundColor", new Color(100,200,200)}, { "MessageBundle", new MessageBundle_fr()}, { "EvaluationBundle", new EvaluationBundleTeacher()}, }; |
As explained in the examples for Preference Dictionary, the Vim editor [35] has culture-specific options integrated with other options. Vim also exemplifies Best-Guess Locale because users can start Vim in Hebrew mode or Farsi mode, which has the effect of defining certain options with the appropriate initial values. Below is the code which checks for the Hebrew command-line flag, ’-H’. It sets the current window’s rightleft (w_p_rl) flag and Hebrew Keyboard map (p_hkmap) flag to true.
case 'H': /* "-H" start in Hebrew mode: rl + hkmap set */ #ifdef RIGHTLEFT curwin->w_p_rl = p_hkmap = TRUE; |
_________________________________________________________________________________
How does the user view and modify the Global Data Model?
The different view classes can have different layouts and may hide some information if it is irrelevant or offensive to some cultures. Of course, this flexibly provides only some of the variation in the user-interface. A concrete view class is still parameterised according to other preferences. It needs to query the Preference Dictionary for Targeted Elements like messages, logos, and background colours.
ArtViewEveryone is the global default and also the English default, and shows details by all raters. ArtViewTeacher shows only the teacher’s view, and is the default French view. This is implementing by making the French preferenceBundle(preferenceBundle_fr) specify EvaluationBundleTeacher as the value for EvaluationBundle. EvaluationBundleTeacher, in turn, specifies ArtViewTeacher as the value for ArtView.
As explained in Global Data Model, Vim [35] stores data separately from the user-interface. The main structure which does store the user-interface information is window, which most importantly stores a buffer of text (the data model). It also contains attributes which track its own height, the portion of the buffer being displayed, and the cursor position.
_________________________________________________________________________________
print "$subject has sent you a message"; |
The number format is flexible in Critique (Figure 5), varying in number of decimal places. The NumberFormat is stored as an entry in the Preference Dictionary. This is not particularly relevant to culture, though the same mechanism could allow for culture-specific formats like “302.100,2” instead of the more common “302,100.2”. Formats for addresses and telephone could be handled in the same way.
Mozilla is a web browser supporting international audiences 2, implemented in C++. It contains a class which provides a common interface for date and time formats, nsIDateTimeFormat. A key method is FormatTime (which is virtual because it has OS-specific implementations):
NS_IMETHOD FormatTime(nsILocale* locale, const nsDateFormatSelector dateFormatSelector, const nsTimeFormatSelector timeFormatSelector, const time_t timetTime, nsString& stringOut) = 0; |
_________________________________________________________________________________
In non-OO languages, it might be possible to store a pointer or reference to a culture-dependent function.
In Critique, there is a Flexible Function: the score can be based on the teacher’s ratings or on everyone’s ratings. This is implemented as a Flexible Strategy. Scorer defines the interface for accessing the calculateScore method. The evaluationBundle stores a reference to the class that implements the desired scoring algorithm.
Gamma et al. list several examples of Strategy, although these are for general usage rather than culture-specific.
[1] M. G. Alvarez, L. R. Kasday, and S. Todd. How we made the web site international and accessible: A case study. In Proceedings of the 4th Conference of Human Factors and the Web. AT & T, 1998. http://www.research.att.com/conf/hfweb/proceedings/proceedings/alvarez/. Accessed March 28, 1999.
[2] W. Barber and A. Badre. Culturability: The merging of culture and usability, 1998. http://www.research.att.com/conf/hfweb/proceedings/proceedings/barber/. Accessed March 28, 1999.
[3] M. Belge. The next step in software internationalization. Interactions, 2(1):21-25, January 1995.
[4] F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal. A System of Patterns. John Wiley & Sons, Chichester, 1995.
[5] M. Campione, K. Walrath, and A. Huml. The Java Tutorial Continued. Addison-Wesley, Reading, MA, 1999.
[6] J. Coldewey. User interface software. In Pattern Languages of Program Design 1998, 1998. http://jerry.cs.uiuc.edu/plop/plop98/final_submissions/. Accessed March 30, 1999.
[7] Dell Computer Corporation. Dell computer website, 2000. http://www.dell.com. Accessed December 27, 2000.
[8] J. Coutaz. Architectural design for user interfaces. In J. J. Marciniak, editor, Encyclopaedia of Software Engineering, pages 38-49. John Wiley & Sons, New York, 1994.
[9] P. Danton de Rouffignac. How to Sell to Europe. Pitman, New York, 1989.
[10] E. del Galdo. Internationalization and translation: Some guidelines for the design of human-computer interfaces. In J. Nielsen, editor, Designing User Interfaces for International Use, pages 39-44. Elsevier, Amsterdam, 1990.
[11] V. Evers and D. Day. The role of culture in interface acceptance. In S. Howard, J. Hammond, and G. Lindgaard, editors, Human-Computer Interaction: Interact ’97, chapter 44, pages 260-267. Chapman & Hall, London, 1997.
[12] T. Fernandes. Global Interface Design. AP Professional, Chesnut Hill, MA, 1995.
[13] E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading, MA, 1995.
[14] J. Grosjean. Life with Two Languages. Harvard University Press, Cambridge, MA, 1982.
[15] E. T. Hall and M. R. Hall. Understanding Cultural Differences. Intercultural Press, Yarmouth, Maine, 1990.
[16] L. Herman. Towards effective usability evaluation in Asia. In J. Grundy and M. Apperly, editors, Proceedings of OZCHI 96, pages 135-136. IEEE Computer Society, Los Alamitos, CA, 1996.
[17] N. Hoft. Developing a cultural model. In E. M. del Galdo and J. Nielsen, editors, International User Interfaces, pages 41-73. John Wiley & Sons, New York, 1996.
[18] L. M. Hynson, Jr. Doing Business with South Korea: A handbook for Executives in the Public and Private Sector. Quorum, New York, 1990.
[19] M. Ito and K. Nakakoji. Impact of culture on user interface design. In E. M. del Galdo and J. Nielsen, editors, International User Interfaces, chapter 6, pages 105-126. John Wiley & Sons, New York, 1996.
[20] S. C. Jain. Marketing Planning and Strategy. South-Western Publishing, Cincinanati, OH, 1993.
[21] K. Kreft and A. Langer. The Locale Framework. C++ Report, 9(9):58-59,62-63,69, sep 1997.
[22] T.V. Luong, J.S.H. Lok, D. Taylor, and K. Driscoll. Internationalization: Developing Software for Global Markets. John Wiley & Sons, USA, 1995.
[23] M. J. Mahemoff and L. J. Johnston. Principles for a usability-oriented pattern language. In P. Calder and B. Thomas, editors, OZCHI ’98 Proceedings, pages 132-139. IEEE Computer Society, Los Alamitos, CA, 1998.
[24] M. J. Mahemoff and L. J. Johnston. Handling multiple domain objects with Model-View-Controller. In C. Mingins and B. Meyer, editors, Technology of Object-Oriented Languages and Systems 32, pages 28-39. IEEE Computer Society, Los Alamitos, CA, 1999.
[25] T. W. Melaon. International and Global Marketing: Concepts and Cases. Irwin/McGraw Hill, Boston, MA, 2nd edition, 1998.
[26] M. K. Mooij. Global Marketing and Advertising: Understanding Cultural Paradoxes. Sage, Thousand Oaks, CA, 1998.
[27] J. Nielsen. Usability testing of international interfaces. In J. Nielsen, editor, Designing User Interfaces for International Use, pages 39-44. Elsevier Science Publishers, Amsterdam, 1990.
[28] F. Rafii and S. Perkins. Internationalizing software with concurrent engineering. IEEE Software, 12(5):39-46, September 1995.
[29] G. F. Rogers. Framework-Based Software Development in C++. Prentice-Hall PTR, Upper Saddle River, NJ, 1997.
[30] P. Russo and S. Boor. How fluent is your interface? Designing for international users. In S. Ashlund, A. Henderson, E. Hollnagel, K. Mullet, and T. White, editors, InterCHI 1993, pages 342-347. IOS Press, Amsterdam, 1993.
[31] P. Sukaviriya and L. Moran. User interface for Asia. In J. Nielsen, editor, Designing User Interfaces for International Use, pages 189-218. Elsevier, Amsterdam, 1990.
[32] D. Taylor. Global software: Developing Applications for the International Market. Springer-Verlag, New York, 1992.
[33] United Nations University (Institute of Advanced Studies). One web, one language - UNL, 2000. http://www.iai.uni-sb.de/UNL/unl-en.html. Accessed November 12, 2000.
[34] E. Uren, R. Howard, and T Perinotti. Software Internationalization and Localization. Van Nostrand Reinhold, New York, 1993.
[35] Vim Development Team. Vim. http://www.vim.org. Accessed March 15, 1999.
[36] A. Yeo. World-wide CHI: Cultural user interfaces, a silver lining in cultural diversity. SIGCHI, 28(3):4-7, July 1996.
[37] F. Zlotnick. The POSIX.1 Standard: A Programmer’s Guide. Benjamin/Cumming, Redwood City, CA, 1991.
This work is licensed under a Creative Commons Attribution 3.0 Unported License.