{"id":113,"date":"2008-12-20T11:43:00","date_gmt":"2008-12-20T11:43:00","guid":{"rendered":"\/lisa\/post\/2008\/12\/20\/Sensitivity-versus-Consistency-in-Global-Communication.aspx"},"modified":"2008-12-20T11:43:00","modified_gmt":"2008-12-20T11:43:00","slug":"sensitivity-versus-consistency-in-global-communication","status":"publish","type":"post","link":"https:\/\/spacefold.com\/lisa\/2008\/12\/20\/sensitivity-versus-consistency-in-global-communication\/","title":{"rendered":"Sensitivity versus Consistency  in Global Communication"},"content":{"rendered":"<p>\n&nbsp;My colleague Wisdom posts a comment on this blog, and also <a href=\"\/lisa\/2008\/09\/16\/YAPS-on-Filters-in-an-RDL-Whats-not-to-Like#id_99a4f813-9504-476c-963a-1e0e56435960:\" title=\"Wisdom's comment-question\">asks<\/a>\n<\/p>\n<blockquote>\n<p style=\"margin-right: 200px; background-color: aliceblue\">\n\t&nbsp;Side talk, why i can&#39;t find China in the country List, when i am adding a comment?\n\t<\/p>\n<\/blockquote>\n<p>\nHmmm.&nbsp;\n<\/p>\n<p>\nIn looking into this, I checked into the relevant <a href=\"http:\/\/www.dotnetblogengine.net\/\" target=\"_blank\" title=\"BlogEngine.NET site\" rel=\"noopener\">BlogEngine.NET<\/a> code, which looks something like the following (see CommentView.ascx.cs):\n<\/p>\n<p class=\"code\">\n<font color=\"#0000ff\">foreach<\/font><font color=\"#000000\"> (<\/font><font color=\"#2b91af\">CultureInfo<\/font><font color=\"#000000\"> ci <\/font><font color=\"#0000ff\">in<\/font><font color=\"#000000\"> <\/font><font color=\"#2b91af\">CultureInfo<\/font><font color=\"#000000\">.GetCultures(<\/font><font color=\"#2b91af\">CultureTypes<\/font><font color=\"#000000\">.SpecificCultures))<\/font><font color=\"#000000\"> <br \/>\n{ <br \/>\n<\/font><font color=\"#2b91af\">&nbsp;&nbsp; RegionInfo<\/font><font color=\"#000000\"> ri = <\/font><font color=\"#0000ff\">new<\/font><font color=\"#000000\"> <\/font><font color=\"#2b91af\">RegionInfo<\/font><font color=\"#000000\">(ci.Name);<\/font><font color=\"#0000ff\"><br \/>\n&nbsp;&nbsp; if<\/font><font color=\"#000000\"> (!dic.ContainsKey(ri.EnglishName))<\/font><font color=\"#000000\"> <br \/>\n&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dic.Add(ri.EnglishName, ri.TwoLetterISORegionName.ToLowerInvariant()); <br \/>\n&nbsp;&nbsp; }<br \/>\n<\/font><font color=\"#0000ff\">&nbsp;&nbsp; if<\/font><font color=\"#000000\"> (!col.Contains(ri.EnglishName)) <br \/>\n&nbsp;&nbsp; { <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; col.Add(ri.EnglishName); <br \/>\n&nbsp;&nbsp; } <br \/>\n}<br \/>\n<\/font>\n<\/p>\n<p>\n&#8230; that looked perfectly fine. It does seem from <a href=\"http:\/\/www.dotnetnuke.com\/Community\/Forums\/tabid\/795\/forumid\/78\/postid\/9108\/scope\/posts\/Default\/\" target=\"_blank\" title=\"DotNetNuke Norwegian question\" rel=\"noopener\">other&nbsp;.NET framework communications<\/a>&nbsp;that it is possible for this code not to be all-inclusive.&nbsp; And, in fact, the BlogEngine.NET code underscores this potential issue, with the following code in the same method:\n<\/p>\n<p class=\"code\">\n<font color=\"#008000\">\/\/ Add custom cultures<\/font> <\/p>\n<p><font color=\"#0000ff\">if<\/font><font color=\"#000000\"> (!dic.ContainsValue(<\/font><font color=\"#a31515\">&quot;bd&quot;<\/font><font color=\"#000000\">))<\/font><font color=\"#000000\"> <br \/>\n<\/font><font color=\"#000000\">{ <br \/>\n&nbsp;&nbsp; dic.Add(<font color=\"#a31515\">&quot;Bangladesh&quot;<\/font><font color=\"#000000\">, <\/font><font color=\"#a31515\">&quot;bd&quot;<\/font><font color=\"#000000\">);<br \/>\n&nbsp;&nbsp;&nbsp; <\/font><font color=\"#000000\">col.Add(<\/font><font color=\"#a31515\">&quot;Bangladesh&quot;<\/font><font color=\"#000000\"> );<br \/>\n} <\/p>\n<p><\/font><\/font>\n<\/p>\n<p>\nIt also seems, <a href=\"http:\/\/blog.madskristensen.dk\/post\/Bind-countries-from-CultureInfo-class-in-C\/\" target=\"_blank\" title=\"Bind countries from CultureInfo class\" rel=\"noopener\">on further investigation<\/a>, that other blogs besides mine that are based on Blog.Net have seen this issue specifically with Chinese viewers.&nbsp;\n<\/p>\n<p>\nWhat&#39;s the real problem?\n<\/p>\n<h5>Cultural-appropriateness is in the eye of the beholder<\/h5>\n<p>\nIn his response to the question specifically about BlogEngine, Mads Kristensen points out that China <em><strong>is<\/strong> <\/em>on the list<em>.<\/em>&nbsp; It&#39;s just listed according to its SpecificCulture-EnglishName value, which is <strong>People&#39;s Republic of China<\/strong>, not <strong>China<\/strong>.&nbsp;\n<\/p>\n<p align=\"center\">\n<img loading=\"lazy\" decoding=\"async\" src=\"\/lisa\/wp-non\/migrated\/2008\/12\/SpecificCultureInfoList.png\" alt=\"\" width=\"258\" height=\"447\" \/>&nbsp;\n<\/p>\n<p>\nYou can see this illustrated in <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.globalization.cultureinfo\/\" target=\"_blank\" title=\"MSDN discussion of CultureInfo\" rel=\"noopener\">the MSDN post on the CultureInfo class<\/a>, in fact, where different &quot;manifestations&quot; of Chinese culture info are shown, in response to the following sample code:\n<\/p>\n<p class=\"code\">\n<span style=\"color: blue\">foreach<\/span> ( CultureInfo ci <span style=\"color: blue\">in<\/span> CultureInfo.GetCultures( CultureTypes.SpecificCultures ) )&nbsp; <br \/>\n{<br \/>\n&nbsp; <span style=\"color: blue\">if<\/span> ( ci.TwoLetterISOLanguageName == <span style=\"color: maroon\"><span style=\"color: maroon\">&quot;zh&quot;<\/span><\/span> )&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.Write( <span style=\"color: maroon\"><span style=\"color: maroon\">&quot;0x{0} {1} {2,-37}&quot;<\/span><\/span>, ci.LCID.ToString(<span style=\"color: maroon\"><span style=\"color: maroon\">&quot;X4&quot;<\/span><\/span>), <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ci.Name, ci.EnglishName );<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine( <span style=\"color: maroon\"><span style=\"color: maroon\">&quot;0x{0} {1} {2}&quot;<\/span><\/span>, ci.Parent.LCID.ToString(<span style=\"color: maroon\"><span style=\"color: maroon\">&quot;X4&quot;<\/span><\/span>), <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ci.Parent.Name, ci.Parent.EnglishName );<br \/>\n&nbsp;&nbsp; }<br \/>\n}\n<\/p>\n<p>\n&nbsp;\n<\/p>\n<p>\n&#8230; like this:\n<\/p>\n<table border=\"0\" align=\"center\">\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\n\t\t\tSPECIFIC CULTURE\n\t\t\t<\/p>\n<\/th>\n<th>\n<p align=\"left\">\n\t\t\tPARENT CULTURE\n\t\t\t<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>0x0404 zh-TW Chinese (Taiwan)<\/td>\n<td>0x7C04 zh-CHT Chinese (Traditional)<\/td>\n<\/tr>\n<tr>\n<td>0x0804 zh-CN Chinese (<font color=\"#ff0000\">People&#39;s Republic of China<\/font>)<\/td>\n<td>0x0004 zh-CHS Chinese (Simplified)<\/td>\n<\/tr>\n<tr>\n<td>0x0C04 zh-HK Chinese (Hong Kong S.A.R.)<\/td>\n<td>0x7C04 zh-CHT Chinese (Traditional)<\/td>\n<\/tr>\n<tr>\n<td>0x1004 zh-SG Chinese (Singapore)<\/td>\n<td>0x0004 zh-CHS Chinese (Simplified)<\/td>\n<\/tr>\n<tr>\n<td>0x1404 zh-MO Chinese (Macao S.A.R.)<\/td>\n<td>0x7C04 zh-CHT Chinese (Traditional)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\n&nbsp;\n<\/p>\n<p>\nSo, okay.&nbsp; That behavior and classification system seems perfectly defensible and understandable&#8230;&nbsp;\n<\/p>\n<h5>&nbsp;&nbsp;<\/h5>\n<h5>&#8230;But it&#39;s not good enough. <\/h5>\n<p>\nThink about it this way: Wisdom,&nbsp;&nbsp;the consumer of this framework result,&nbsp; is already working in a language that is not his own, just to read the blog and navigate the list.&nbsp; I am truly grateful he makes the effort.\n<\/p>\n<p>\nWhy should he have to realize that the English-speaking world refers to his&nbsp;country as &quot;People&#39;s Republic of China&quot;, when his motherland-centered heart&nbsp;envisions it as &quot;China&quot;, even in English?&nbsp;\n<\/p>\n<p>\nHe knows he&#39;s supposed be navigating this list according to a sort-order based on an alphabetization that is also not his &#8212; in which &quot;P&quot; is nowhere near &quot;C&quot;.&nbsp;&nbsp; Why should he look near &quot;P&quot;?\n<\/p>\n<p class=\"NB\">\nI want to point out that Wisdom didn&#39;t even ask &quot;why isn&#39;t the value in the list&quot;.&nbsp; He asked: &quot;why <em>can&#39;t I find<\/em>&nbsp; the value in the list.&quot;&nbsp; It&#39;s there, but he can&#39;t find it.&nbsp; And it&#39;s not his fault, even though he implicitly accepted that the problem was his.\n<\/p>\n<p>\nI value&nbsp;Wisdom&#39;s comments, and those of the other members of my team.&nbsp; So, while I &quot;get&quot; the value of the .NET framework generalized approach here, I&#39;m going to&nbsp;include the following, along with&nbsp;the Bangladesh-adding coding example quoted above, in the original code:\n<\/p>\n<p class=\"code\">\n<font color=\"#008000\"><font color=\"#008000\">\/\/LSN<br \/>\n<\/font><\/font><font color=\"#008000\"><font color=\"#008000\">\/\/ add to standard-generated<br \/>\n\/\/ &lt;option value=&quot;cn&quot;&gt;People&#39;s Republic of China&lt;\/option&gt;<\/font><\/font> <\/p>\n<p><font color=\"#000000\">dic.Add(<\/font><font color=\"#a31515\"><font color=\"#a31515\">&quot;China&quot;<\/font><\/font><font color=\"#000000\">, <\/font><font color=\"#a31515\"><font color=\"#a31515\">&quot;cn&quot;<\/font><\/font><font color=\"#000000\">);<\/font><font color=\"#000000\"> <br \/>\n<\/font><font color=\"#000000\">col.Add(<font color=\"#a31515\"><font color=\"#a31515\">&quot;China&quot;<\/font><\/font><font color=\"#000000\">);<\/font> <\/font>\n<\/p>\n<p>\nSure, it&#39;s a hack.&nbsp;&nbsp;So what?\n<\/p>\n<h5>No perfect balance<\/h5>\n<p>\nWhen you work in a globally-dispersed team, as I do, you often have to balance two goals:\n<\/p>\n<ol>\n<li>Everybody needs to share&nbsp;some common vocabulary and frame of reference.&nbsp; Consensus isn&#39;t real&nbsp;if every member of the group has a different idea of what was discussed and agreed on.&nbsp;\n<p>\tFrom a technical point of view, frameworks like .NET provide a common vocabulary in the guise of a set of shared classes and libraries, with known capabilities, features, and functions.&nbsp; The fact that the names of the classes are English-based, in many if not all cases, doesn&#39;t prevent non-English-speakers from understanding the usage of the classes, although it may make it more difficult for non-English-speakers from <em>guessing<\/em> at the usage of the classes.<\/p>\n<p>\tAs the team develops its own&nbsp;libraries, this common vocabulary widens.&nbsp; The team&#39;s &quot;shared muscles&quot; develop strength and agility.<\/p>\n<p>\tFrom a non-technical point of view, the team starts with a few shared cultural assumptions, such as: &quot;We are all software developers&quot; and &quot;We all work for the same company&quot;, and it slowly develops its own culture, based on shared jokes, memories, experiences, conversations, and hours.<\/p>\n<\/li>\n<li>Everybody needs to respect&nbsp;some boundaries&nbsp;based on&nbsp;cultural disparity.&nbsp;&nbsp;Because my team has both US and China members, it&#39;s not okay for any of us to assume availability of team resources based on our own cultural calendar and holiday schedule. Both US and Chinese team members sometimes generalize about&nbsp;&quot;Americans&quot;, but if we had Canadian or Mexican team members, they&nbsp;might take exception.&nbsp;\n<p>\tFrom a technical point of view, frameworks like .NET provide a way to localize user interfaces and feedback mechanisms, calendars, and so on, to express an application&#39;s respect for each user&#39;s cultural frame of reference.<\/p>\n<p>\tFrom a non-technical point of view, we make all kinds of personal accommodations, from crazy working hours to fine-tuned expectations of communications style.\n\t<\/li>\n<\/ol>\n<p>\n&nbsp;\n<\/p>\n<p>\nAs goals, the drive-to-consensus and respect-for-differences often undercut each other.&nbsp;\n<\/p>\n<p>\nWe all do the best we can. So does the .NET Framework, I guess.\n<\/p>\n<p>\nThere&#39;s no moral here.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;My colleague Wisdom posts a comment on this blog, and also asks &nbsp;Side talk, why i can&#39;t find China in the country List, when i am adding a comment? Hmmm.&nbsp; In looking into this, I checked into the relevant BlogEngine.NET code, which looks something like the following (see CommentView.ascx.cs): foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) {<a class=\"more-link\" href=\"https:\/\/spacefold.com\/lisa\/2008\/12\/20\/sensitivity-versus-consistency-in-global-communication\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,3,4],"tags":[],"class_list":["post-113","post","type-post","status-publish","format-standard","hentry","category-asp-net","category-general-techspeak","category-life"],"_links":{"self":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/comments?post=113"}],"version-history":[{"count":0,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/113\/revisions"}],"wp:attachment":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/media?parent=113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/categories?post=113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/tags?post=113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}