【问题标题】:Is it possible to dynamically add ag-grid localisations?是否可以动态添加 ag-grid 本地化?
【发布时间】:2019-06-12 21:32:54
【问题描述】:

我正在使用ag-grid 框架的AgGridModule Angular 包装器。我的应用程序是一个 Angular AOT 应用程序,它使用 ngx-translate 库(它在页面加载时动态加载当前选择的语言的翻译数据文件)处理本地化。这意味着翻译只能异步使用。因此,我不能只在gridOptions (as recommended) 中设置localeText 属性,因为在生成网格之前我没有文本。

有谁知道如何处理这种情况?理想情况下,我只需将 RxJS Observable 分配给 localeText 属性,它会在准备好时发送适当的文本对象,但这目前似乎不起作用。

【问题讨论】:

    标签: javascript angular typescript ag-grid ag-grid-angular


    【解决方案1】:

    这可以通过提供您自己的localeTextFunc 来完成。该函数从网格中获取键并使用网格外部的翻译函数(在我们的例子中为 ngx-translate)进行翻译。如果未找到匹配项,则应返回默认值(即网格的英文值,网格默认语言)。

    this.gridOptions = {
      localeTextFunc: (key: string, defaultValue: string) => {
        // look the value up. using the ngx translate service
        const data = this.translate.instant(key);
        return data === key ? defaultValue : data;
      }
    };
    

    注入 TranslateService 作为“@ngx-translate/core”的翻译,以使用同步 translate.instant() 方法。但请确保在调用即时方法之前已加载翻译。

    【讨论】:

    • 感谢您的回复,但我不明白这是如何工作的。 translate.get() 返回一个异步可观察流,因此订阅闭包中的返回在 localeTextFunc 函数中应该没有任何影响。
    • 是的,你是对的。谢谢你指出。代替translate.get(),我们可以使用translate.instant(),它返回一个键的即时翻译值,这个方法是同步的。
    • instant 确实可能有用,但如果尚未加载翻译文件,则不会给出正确的值。
    • 您可以使用.use() 方法预加载翻译,但.use() 是异步的,可能需要在您的APP_INITIALIZER 中使用APP_INITIALIZER 函数,如此github 问题-github.com/ngx-translate/core/issues/517#issuecomment-299637956 中所示需要编写自己的自定义同步翻译加载器。
    • 好的,谢谢。我认为这是 ag-grid 的一个缺点。我将坚持我当前(不完美)的解决方案,将翻译分配给本地对象(localeTextFunc 每次都会查看)并在加载翻译以强制 ag-grid 调用时尝试刷新网格再次起作用(到目前为止,我还没有为分组列工作)。
    猜你喜欢
    • 2019-03-01
    • 2019-03-28
    • 2015-10-22
    • 2021-11-15
    • 2022-10-25
    • 2021-09-21
    • 2018-10-24
    • 2017-05-01
    • 2020-03-21
    相关资源
    最近更新 更多