iT邦幫忙

2022 iThome 鐵人賽

DAY 6
2
自我挑戰組

Bug仔的筆記本系列 第 6

ASP.NET 依"組態"切換多國語系檔案

  • 分享至 

  • xImage
  •  

感謝網友提出問題(需求)讓我鐵人賽平安度過一天

前言

在一次讀書會的時候,某位朋友提到他的 ASP.NET 專案是使用 Monorepo 的方式在管理。所以他希望 .NET 有依組態的選擇,發布出來的東西不一樣的功能。像是不同的語系,能用不同組態來區分。如果發布的組態是Japan,那產出的專案裡面只有日本語系,不會有英文、中文。

他又更進一步舉例,公司接的甲、乙、丙、丁專案,都是Base在零號專案上,什麼Controller、Model之類的,幾乎是共用。Monorepo 能提高他的維護容易度,核心有修正,每個專案發佈出去都是最新的核心。

但是他遇到了一個問題,就是發佈的時候,有些功能是甲有乙沒有。所以要額外選擇開啟或關閉某個功能。如果乙沒有這功能(他指Controller),不是程式執行中用邏輯判斷關閉,而是發佈的乙專案就沒有這個功能(Controller)。目前網友是發佈前手動停用某些功能,來達到發佈出去的乙專案內不含該功能。所以他希望能透過組態的方式來控制這件事。
(聽對方描述似乎前端框架已有這種功能!?)

其實,我當下聽到 Monorepo 這個概念的時候,整個大腦都在星爆。
https://ithelp.ithome.com.tw/upload/images/20220920/20120420wcRpqD7R1h.png

不過最前面他說希望能發佈的語系檔不同,我倒是有想法!

ASP.NET 的多國語系(i18n)是放在App_LocalResources資料夾裡,我們稍微動點手腳就行了。

利用建置事件

我們可以寫一些腳本(Script)對專案設定建置前事件建置後事件,來對專案做額外的處理。

在這裡我決定寫一段腳本,在建置前替換位於App_LocalResources裡的語系檔。

例如放在App_MyLocalResources裡的語系檔,才是真正的語系檔。當我選擇中文組態的時候,就把中文的語系檔拿去替換。
https://ithelp.ithome.com.tw/upload/images/20220920/20120420XuNrrPn5or.png

https://ithelp.ithome.com.tw/upload/images/20220920/20120420tGU2FbFflK.png

腳本如下:

if "$(ConfigurationName)" == "中文" (
  copy  "..\App_MyLocalResources\zh-tw.aspx.resx"  "..\App_LocalResources\Default.aspx.resx" /y
) ELSE (
  copy "..\App_MyLocalResources\Default.aspx.resx"  "..\App_LocalResources\Default.aspx.resx" /y
)

對專案右鍵,點選屬性
https://ithelp.ithome.com.tw/upload/images/20220920/20120420DxRBNI14U6.png

選擇建置事件
https://ithelp.ithome.com.tw/upload/images/20220921/2012042085XO3nZW4o.png

這樣當你選擇中文組態的時候,進行建置你就會看到位於App_LocalResources裡的Default語系檔,其內容已經被替換成中文語系。
https://ithelp.ithome.com.tw/upload/images/20220921/20120420YOzOO4iTMB.png

如果有更好的做法,歡迎各位網友補充。
另外,其實我每天都在煩惱明天要寫什麼內容,如果有想聽的主題,歡迎留言給我,感謝你:)


上一篇
找不到 roslyn\csc.exe 的一部分
下一篇
C# 讀取 XML 的方式
系列文
Bug仔的筆記本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言