現在、かなり広範なモジュールをローカライズしようとしています。単一のresxを使用するもの(管理を容易にするため)では、キーを返す次のコードを記述しましたが、イベントビューア(下のコード)
また、httpcontext.current.server.mappathを使用できないことも追加する必要があります。これは、httpcontextがない場合にも関数が使用されるためです。
コード:
Public Shared Function GetString(ByVal key As String, ByVal ParamArray params As String()) As String
Dim SharedResourceFolder As String = "~/App_GlobalResources/"
Dim myStr As String = Nothing
If CultureInfo.CurrentCulture.Name <> "en-GB" Then
myStr = Localization.GetString(key, SharedResourceFolder & "Resources." & CultureInfo.CurrentCulture.Name & ".resx")
If myStr Is Nothing OrElse myStr = "" Then
myStr = Localization.GetString(key, SharedResourceFolder & "Resources." & CultureInfo.CurrentCulture.Name.Substring(0, 2) & ".resx")
End If
End If
If myStr Is Nothing OrElse myStr = "" Then
myStr = Localization.GetString(key, SharedResourceFolder & "Resources.resx")
End If
If myStr IsNot Nothing AndAlso myStr <> "" Then
Return String.Format(CultureInfo.CurrentCulture, myStr, params)
End If
Dim res As String = Localization.GetString(key, "Resources.resx", "en-GB")
If String.IsNullOrEmpty(res) Then
Return Nothing
End If
Return String.Format(CultureInfo.InvariantCulture, res, params)
End Function
エラーメッセージ:
System.ArgumentException:相対仮想パス'sharedresources.resx'はここでは許可されていません。System.Web.VirtualPath.FailIfRelativePath()at System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath、Boolean permitNull)at System.Web.Hosting.HostingEnvironment.MapPathInternal(VirtualPath virtualPath)atSystem.Web.Hosting.HostingEnvironment。 MapPath(VirtualPath virtualPath)at System.Web.Hosting.HostingEnvironment.MapPath(String virtualPath)at DotNetNuke.Services.Localization.Localization.GetResourceFileCallBack(CacheItemArgs cacheItemArgs)at DotNetNuke.Common.Utilities.DataCache.GetCachedData [TObject](CacheItemArgs cacheItemArgs、 CacheItemExpiredCallback cacheItemExpired、ブールストアInDictionary)
助けてくれてありがとう
アップデート:
物理パスに変更すると、DNNコア内で問題が発生し、仮想パスに戻り、モジュール内の他の場所でコード行を変更して問題を修正しました