2011-05-18 62 views
3

可能重複:
asp.net globalization difference in inline tags本地化HTML靜態文本

我在MSDN上閱讀靜態文本的定位和本地化的控制,但我還是不明白:我應該如何爲本地化例如一個HTML表的靜態文本?

<table> 
    <tr> 
     <td> 
      <%=Resources.Resource1.String1 %> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <%=Resources.Resource1.String2 %> 
     </td> 
    </tr> 
</table> 

<table> 
    <tr> 
     <td> 
      <asp:Localize ID="Column1" runat="server" Text="<%$ Resources: Resource1, String1 %>" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <asp:Localize ID="Column2" runat="server" Text="<%$ Resources: Resource1, String2 %>" /> 
     </td> 
    </tr> 
</table> 

首先是顯然是更具可讀性,我也不需要改變運行時的翻譯。也許它有一些劣勢與第二?我爲我的愚蠢問題感到抱歉,但我想確保我選擇的方式更加可取和可維護。

回答

1

你顯示的例子並沒有真正的區別。第一個將更容易編碼 - 你會看到IntelliSense(代碼完成)提示。

個人而言,我更喜歡Implicit Localization它會給你默認,我覺得降低了代碼的混亂:

<table> 
    <tr> 
     <td> 
      <asp:Localize ID="Column1" runat="server" meta:resourcekey="Column2" Text="Column 1 name" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <asp:Localize ID="Column2" runat="server" meta:resourcekey="Column1" Text="Column 2 name" /> 
     </td> 
    </tr> 
</table> 

而且,我發現App_LocalResources文件成爲本地化Asp.Net應用程序更好的方式 - 你需要將您的翻譯分成幾個.resx文件,這可能更容易在大型代碼庫中維護(例如,使用Translation Memory軟件會更容易;它應該花費更少)。
有關隱式本地化的更多信息,請參閱我的previous answer

0

第二個會給你一個控件的ID,你可以從代碼中引用來改變它。第一個沒有這個能力。例如:

if (condition) 
    Column1.Text += " - 123"; 
else 
    Column1.Text += " - 456"; 
+0

感謝上帝它沒有。你在這裏展示的是一個衆所周知的本地化缺陷 - 連接。如果你需要「追加」字符串,你應該使用String.Format()。 – 2011-05-19 06:21:48

+0

@Pawel:你能給我一個參考嗎? – mellamokb 2011-05-19 15:37:17

+0

請查找包含示例的我的[以前的答案](http://stackoverflow.com/questions/5298791/problem-when-concatenating-string-and-a-resource-value/5307413#5307413)。我不確定你的意思是「參考」。 – 2011-05-19 16:13:47