私は2つのリソースファイルの両方が英語の文字列が正しくロードされているMonoDevelopのMonoTouchでSystem.Resources.ResourceManagerが動作しない
にリソースとして埋め込まれて
strings.resxとstrings.fr-CA.resx
を持っています。文化を変更すると、Resource Managerに例外がスローされます。
リソースがロードされるはずの場合、次のシステムコードで例外がスローされます。これはSystem.Resources.ResourceManagerにあります。
string filename = GetResourceFileName (resourceCulture);
if (!resourceCulture.Equals (CultureInfo.InvariantCulture))
{
/* Try a satellite assembly */
Version sat_version = GetSatelliteContractVersion(MainAssembly);
try
{
Assembly a = MainAssembly.GetSatelliteAssemblyNoThrow(
resourceCulture,
sat_version);
if (a != null)
{
stream = a.GetManifestResourceStream (filename);
if (stream == null)
{
stream = GetManifestResourceStreamNoCase (a, filename);
}
}
}
catch (Exception)
{
// Ignored
}
アセンブリaは、他のカルチャリソースファイルでは常にnullであり、例外がスローされます。
プロジェクト設定がありません。
これは、通常の.netソリューションでVisual Studioでこれを行うと機能しているようです。
これをテスト.net Windows環境で作成すると、出力ディレクトリにfr-CAというフォルダが作成されます。
更新日:
私はこれを少し進歩させました。 Windowsとデスクトッププロジェクトを使用してfr-CAフォルダを作成しました。その後、Visual Studioで作成したフォルダを.appバンドルにコピーしました。この後、frenchリソースはシミュレータで正しく使用されます。このアプローチが実際のデバイスでうまくいくかどうかはわかりません。