请再帮忙,善良的人(Please help again, kind people)

   IT问题网   2020-06-27 00:00:00

问 题

大家好,



非常沮丧。我做了两天的研究,我不知道如何本地化一个常量字符串。你能帮忙吗?我的事情是:我可以声明一个本地常量字符串,但不能从其他类访问它。我不能在方法之前声明常量字符串,因为我需要接受en-gb,fr-fr等参数来指定资源文件。请帮忙。在此先感谢。



我在其中一个类中有这个代码:private const string header ="phone number";

私有字符串footer ="name";

我想本地化它,所以我有一个本地化类:

 namespace people 
{
public static class localization
{
public static string name = null; //对于名称,一切正常,因为name是私有字符串
public static string phone_number = null; //对于phone_number,它不是,因为phone_number是一个常量字符串

public static void cultureinput(string culture)
{
cultureinfo ci = new cultureinfo(culture) ;
resourcemanager resourcemgr = resourcemanager.createfilebasedresourcemanager(...);
name = resourcemgr.getstring("name",ci);
phone_number = resourcemgr.getstring("phone_number",ci);
}
}
}


当我尝试替换时:private const stringheader = localization.phone_number ;

它给了我一个错误:标题必须分配一个常量。





[已编辑]代码包含在"pre"标签中[/已编辑]

解决方案

不要使用常量字符串对于本地化,使用静态字符串属性从资源中提取本地化的字符串值。

根据定义,您无法本地化常量。 (a 常数是如此恒定,不是吗?:-))



在本地化之前,你需要全球化该项目。基本上,这意味着使项目功能不可知到ui文化



首先,你需要得到摆脱所有立即常量(代码中硬编码的那些),特别是字符串。对于中间步骤,您可以将它们转换为在某些(特殊)静态类中显式定义的常量。在某些项目中,可能存在一些永远不应该本地化的常量(但并非总是如此);在这种情况下,请清楚地标记这部分代码:"不要本地化"。



当您看到要本地化的字符串时,将它们全部移动到资源。我们假设您使用.resx资源。创建资源文件,添加资源名称和值。现在,打开自动生成的c#文件;在解决方案资源管理器中显示的项目结构中,它将被放置为资源节点的子节点。在此文件中,找到具有静态属性的静态类;属性的名称将与资源文件中的名称相同或类似。现在,只需在代码中使用这些名称而不是常量。因此,所有直接常量都应该去,并且所有需要本地化的常量都只能在资源中找到。



实际上,全球化还有更多,但是上面描述的步骤是最重要的。当所有渲染字符串的长度发生变化时,您还需要确保ui设计可以很好地运行。您还应该根据文化来处理各种数据的正确和独立于文化的处理,例如日期时间格式,货币,数字表示等。在本地化期间,您需要决定如何处理所有键盘热键并测试它们的一致性。



全球化完成,是时候去本地化了。对于本地化,您永远不应重新触摸或修改基本全球化代码。 主要的全球化组件在本地化期间保持不变。这是本地化的关键思想。本地化资源被添加到解决方案中,而不是替换任何东西。该应用程序应该只能切换线程的文化和ui文化。



创建附属程序集匹配全球化资源的结构。您的构建应根据文化的命名约定将它们放在不同的目录中。当应用程序的线程文化(让我们说,主ui线程)切换到另一个时,全局化应用程序会自动选择要使用的资源集。资源程序集(附属程序集)可以通过各自资源目录中的文化名称(如fr-fr)找到;如果找不到这样的目录,回调机制会找到最近的可用实现文化,一直到主全球化程序集中使用的文化,以防无法找到本地化资源。



如需了解更多信息,请参阅:

http://msdn.microsoft.com/en-us/library/21a15yht%28v=vs.100%29.aspx[ ^ ]。



[编辑]



这是对常数的一些澄清,以回应下面的讨论:



  const   string  endpointaddressformat = "  https://www.mydomain.tld/myserviceamp; username = {0}";  //  显式常量 

// 也通过语义保持不变,但函数调用需要静态字段
static string endpointaddress = string .format(endpointaddressformat, " me");

const string exceptionformat = @" {0}:{1}"; // 另一个显式常量

string message = " 不起作用!"; // 消息是一个变量,"不起作用!"是立即不变的 - 非常糟糕的做法
string bettermessage = string .format (exceptionformat,myexception.gettype()。name,myexception.message); // 更好

// 但将exceptionformat移动到资源将是最好的




即使它不应本地化,立即常量也很糟糕。他们把维护变成了噩梦。只有在开发过程中才能接受和方便。显式常量怎么样?这取决于。许多应该转移到配置数据文件或资源,但有些是正常的。



-sa

标签:帮忙善良仁慈



分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

如何使用c#,net动态地在textarea中添加文本?(how to add text in textarea dynamically using c#,net)

problem string query = string.empty; query = "select mess ...

在Visual Studio 2010中创建Crystal Reports(Creating Crystal Reports in Visual Studio 2010)

problem im creating crystal reports using visual studio 2 ...

控制以填充数据并执行回发(control to fill the data and perform postback)

problem hi, is there any control to fill the data from da ...

System()vs CreateProcess()vs ShellExecute()(System() vs CreateProcess() vs ShellExecute())

problem here''s one for everyone, i''m running a batch fi ...

将TCL代码转换为C ++ ...(Convert a TCL code to C++...)

problem for {set i 128} {$ilt;256} {incr i 1} { eval lut ...

如何从二进制文件中读取浮点值(How Read Float value from Binary File)

problem hi. i do want to read float value from binary fi ...

使用.bak文件还原数据库(Restore Database using.bak file)

problem good evening everybody, please say how to restor ...

在gridview中显示总和(Show sum In gridview)

problem my gridview has data which looks like below (for ...

Ajax客户端脚本错误(Ajax Client side script error)

problem if (typeof(sys) === #39;undefined#39; ...

如何在UP和DOWN键进行编码(How to code at the UP and DOWN key)

problem i want to move picture box up and down when a use ...

如何计算excel 2003中的时间平均值(how to calculate time averge in excel 2003)

problem hii to all. if any body knows how to calculateave ...

控制相关问题(Control related issue)

problem respected sir, i have a page in which i m gettin ...

在运行时动态绘制div(draw div dynamically at runtime)

problem hiii all, i have a page which i draw all its attr ...

转换数据库值(Convert a databse value)

problem i have a table one field is price and ...

如何使单元格的内容可见为false(How do i make the content of a cell visible false)

problem how do i make the content of a cell visible false ...

qtwebkit并连接cpp和javascript(qtwebkit and connect cpp and javascript)

problem hi to all i am using qwebkit i have a cpp object ...

response.flush&到Response.End(problem with response.flush & response.end)

problem hello everybody, i have used response.flush() wi ...

ShellExecute()不执行(ShellExecute() Not Executing)

problem i''m running a batch file from c++ code.when i ru ...

Radion Button使用Javascript隐藏/可见(Radion Button Hide/Visible Using Javascript)

problem i want hide/visible radio button using javascript ...

如何在此xml文件中插入/删除节点(how to insert/delete a node to this xml file)

problem hi all :) i search in webto find a code that ins ...