在Typescript中使用c#资源(ResX文件)的最佳方式

Best way to use C#-Ressources (ResX Files) in Typescript?

本文关键字:文件 ResX 方式 最佳 资源 Typescript      更新时间:2023-09-26

我们目前的项目是在ASP。Net MVC与Razor。我们使用ResX文件进行几千个翻译。在c#和Asp.net Razor中,这很容易使用HTML:

<div>@Ressources.Local.Test</div>
当我编写JavaScript时,我通常在cshtml文件中使用razor这样做:
<script>alert('@Ressources.Local.Test');</script>

这工作,但似乎有点丑…

几个星期前,我们开始使用Typescript,当然,排除(几乎)所有的javascript代码到ts文件。

我们在这里找到的唯一解决方案是,通过"hack"将资源从c#转换为Typescript:

我们做了一个资源。在CSHTML文件中,我们只包含javascript变量:

var ressourceTest = "@Ressource.Local.Test";

加载该资源。首先在_layout.cshtml中。另外,我们还需要在projectdeclarations .d.ts中为这个变量做一个自定义声明,以便从javascript跳转到typescript:

var ressourceTest:string;
现在我们可以在typescript文件test.ts中使用这个资源:
alert(ressourceTest);

正如你所看到的,这是一个工作的"黑客"或"变通",但它似乎可能会杀死我们几千资源…它是手工制作的,维护时间和工作量都很高……

有更好的主意吗?

我已经看到了一些关于这方面的好主意。

您可以在MVC应用程序中提供JSON端点以提供翻译块。您可以决定要将其细化到什么程度,但本质上您将JSON序列化一个翻译或一组翻译并将其发回。这将避免在一个大视图中塞满数百个元素。

另一种选择是在视图中放置翻译,使它们在上下文中可用。因此,如果你有一个按钮,你要用它来触发一些AJAX调用到服务器你需要说"更新工作"或"更新失败"你可以把属性内联。

<button ... data-msg-success="Saved OK" data-msg-failed="A problem occurred" />

你可以用你的资源填充这些属性