星期一, 11月 19, 2007

安裝完AppLocale後Windows install(msiexec)變亂碼的解決方式

原來安裝AppLocale是為了解決簡繁軟體顯示的問題,但隨之而來的卻是之後新安裝的程式全都變成了亂碼,功能表、登錄檔等等‧此時重新安裝Windows Installer 也無法改變,最後試了網路上的一篇文章解救了熊
1.刪除 C:\WINDOWS\AppPatch\AppLoc.tmp
2.用notepad建立一個無內容檔案,將他存成 C:\WINDOWS\AppPatch\AppLoc.tmp
3.將此檔案設成唯讀

2009/03/16 有更新做法.請參考 安裝完AppLocale後Windows install Shield變亂碼的完美解決方法

星期三, 11月 07, 2007

Foreach Enum AND Localization Devexpress Controls

要將devexpress中文化其實並不難,只要透過指定一個對照表的類別給系統即可
例如 要將Grid中文化可以透過如下的做法
GridLocalizer.Active = new XtraGridLocalizationCHT();

class XtraGridLocalizationCHT : GridLocalizer {
public override string GetLocalizedString(GridStringId id) {
switch (id) {
case GridStringId.FileIsNotFoundError: return "檔案{0}沒有找到";
...
}}}

中文化產品的對照表如下
Product / access objectname
XtraEditors / StringId
XtraGrid / GridStringId
XtraNavBar / NavBarStringId
XtraPivotGrid / PivotGridStringId
XtraPrinting / PreviewStringId
XtraReports / ReportStringId
XtraScheduler / SchedulerStringId
XtraTreeList / TreeListStringId
XtraVerticalGrid /VGridStringId

而類別的定義若你的購買的devexpress是有包含source那可以由source中找.要不然你可以用程式自行來產生! 例如如下的語法可以產生id與顯示英文名稱的對照表,當你有有對照表後,你可以自行翻譯或是寫成程式產生器,不管日後版本怎麼變都可以保持在最新的狀態
foreach (int i in Enum.GetValues(typeof(GridStringId)))
{
MessageBox.Show(
Enum.Parse(typeof(GridStringId), i.ToString(), true).ToString()+" : "+
GridLocalizer.Active.GetLocalizedString((GridStringId)Enum.Parse(typeof(GridStringId), i.ToString(), true)).ToString() );
}