我正在构建一个 C# 应用程序,它可能包含几个资源文件来存储用于语言翻译的字符串。我正在尝试为我的资源文件中的键提出一个命名约定。有人在我之前解决过这个问题吗?
5 回答
只需使用 Pascal 命名约定。不要将密钥归因于模块或类。泛化它以便它可以被重用。
例如:ReadWriteWarningMessage
点分隔约定适用于菜单项。但是动态生成的字符串或用户消息呢?
您是否考虑过像 Menu_File_Open 或 Place_StringDescription 这样的下划线?我目前采用一种方案,其中常见的东西去 Common_ 像 Common_PressHereTo 和查看具体去他们各自的地方像 MainMenu_FileOpen。通常,在下划线之前输入资源出现的位置,在下划线之后输入描述性文本。
我尝试将其组织为类似于我用来布局程序结构的命名空间。因此,如果您有 MyCompany.MyProduct.MyModule,那么该模块中的字符串将是 MyModule_Blah_Blah。这样它们在整个产品中是独一无二的。
请参阅https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-resources。正如@bobbyalex 所说,这包括使用PascalCasing,因为生成的资源设计器文件确实将资源实现为属性。
✔️ 务必在资源键中使用 PascalCasing。
✔️ 请务必提供描述性而非简短的标识符。
❌ 不要使用主要 CLR 语言的语言特定关键字。
✔️ 请务必在命名资源时仅使用字母数字字符和下划线。
✔️ 请务必对异常消息资源使用以下命名约定。
资源标识符应该是异常类型名称加上异常的简短标识符:
ArgumentExceptionIllegalCharacters
ArgumentExceptionInvalidName
ArgumentExceptionFileNameIsMalformed
如果您在资源中有一个名称值对,例如
CloseConfirmation - 是否要关闭窗口而不保存?
添加一个名为 Messages 的新类。
public static class Messages
{
public const String CloseConfirmation = "CloseConfirmation";
public static String GetMessage( String messageId )
{
return //your namespace//.Properties.Resources.ResourceManager.GetString( messageId );
}}
并访问它使用
MessageBox.Show( Messages.GetMessage(Messages.CloseConfirmation));
希望这会有所帮助。