如何在 ASP.NET Web 应用程序中的资源文件 (.rsx) 中显示 Angular 模板中的文本?

问题描述 投票:0回答:2

我将 Angular 14 与旧版 ASP.NET Web 应用程序相结合,并且我们在 Angular 外部文件夹中的资源文件 (.rsx) 中有静态文本。

我需要在组件的模板(Angular 内部)中显示这些文本。我该如何做才能实现这一目标?

asp.net angular resx
2个回答
1
投票

正如评论中提到的,您可能需要实现一个 API 来获取资源文件的值并将其作为 JSON 对象/字典返回。

您可以参考

ResourceManager.GetResourceSet(CultureInfo, Boolean, Boolean)
方法获取资源值。

using System.Collections;
using System.Linq;
using System.Resources;

[HttpGet]
[Route("GetResources")]
public ActionResult GetResources(string? languageCode)
{
    var rm = new ResourceManager(typeof(NumberResources)); // Replace `NumberResources` with your Resource name

    if (String.IsNullOrEmpty(languageCode))
        languageCode = "en-US";

    ResourceSet rs = rm.GetResourceSet(CultureInfo.CreateSpecificCulture(languageCode),
                                         true, false);
    if (rs == null)
    {
        // Handle if resource file not found
        throw BadRequest("Resource not found");
    }

    var dictionary = resourceSet.Cast<DictionaryEntry>()
        .ToDictionary(r => r.Key.ToString(),
            r => r.Value.ToString());

    return Json(dictionary, JsonRequestBehavior.AllowGet);
}

对于Angular端,实现调用API的服务。

@Injectable({ providedIn: 'root' })
export class LanguageService {
  constructor (private httpClient: HttpClient) { }

  getLanguage(languageCode: string): Observable<any> {
    return this.http.get(`<API Domain>/<Controller path>/GetResources?languageCode=${languageCode}`);
  }
}

来电者

constructor (private languageService: LanguageService) { }

ngOnInit() {
  this.languageService.getLanguages(/* languageCode */)
    .subscribe({
      next: (data: any) => {
        console.log(data);
      }
    });
}

0
投票

我认为没有现成的解决方案,最好提供一个在翻译模块中加载的动态/静态生成的 json。

看起来像这个

的东西
© www.soinside.com 2019 - 2024. All rights reserved.