JHipster 应用程序中延迟加载组件的 i18n

2023-12-01

My App是基于JHipster因此语言服务是通过以下方式提供的智语言服务 in the ng-jhipster库使用了一个Jhi配置服务配置ngx-translate无需我在我的中导入和配置 TranslateModuleapp.module。所以当我添加TranslateModule.forRoot(...)对于 AppModule 的导入,一切都崩溃了,我到处都看到“未找到翻译...”消息。

我不知道如何使我的延迟加载页面使用与应用程序的急切加载部分相同的翻译服务实例,以便更改导航栏急切加载组件中的语言会影响延迟加载的页面使用的语言- 加载的页面。

我调查过这个想法 and 这个想法但他们都规定在 AppModule 中配置 TranslateModule 这会破坏它,而且我不知道如何在 JHipster 应用程序中控制 ngx-translate 配置。


我通过将BehaviorSubject 添加到 JhiLanguageHelper 服务,设法修复了延迟加载模块中的翻译。

@Injectable()
export class JhiLanguageHelper {
    renderer: Renderer2 = null;
    private _language: BehaviorSubject<string>;

    constructor(
        private translateService: TranslateService,
        private rootRenderer: RendererFactory2,
        private findLanguageFromKeyPipe: FindLanguageFromKeyPipe,
        private titleService: Title,
        private router: Router
    ) {
        this._language = new BehaviorSubject<string>(this.translateService.currentLang);
        this.renderer = rootRenderer.createRenderer(document.querySelector('html'), null);
        this.init();
    }

    getAll(): Promise<any> {
        return Promise.resolve(LANGUAGES);
    }

    get language(): Observable<string> {
        return this._language.asObservable();
    }

    updateTitle(titleKey?: string) {
        if (!titleKey) {
             titleKey = this.getPageTitle(this.router.routerState.snapshot.root);
        }

        this.translateService.get(titleKey).subscribe((title) => {
            this.titleService.setTitle(title);
        });
    }

    private init() {
        this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {
            this._language.next(this.translateService.currentLang);
            this.renderer.setAttribute(document.querySelector('html'), 'lang', this.translateService.currentLang);
            this.updateTitle();
            this.updatePageDirection();
        });
    }

    private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) {
        let title: string = (routeSnapshot.data && routeSnapshot.data['pageTitle']) ? routeSnapshot.data['pageTitle'] : 'hcmGatewayApp';
        if (routeSnapshot.firstChild) {
            title = this.getPageTitle(routeSnapshot.firstChild) || title;
        }
        return title;
    }

    private updatePageDirection() {
        this.renderer.setAttribute(document.querySelector('html'), 'dir', this.findLanguageFromKeyPipe.isRTL(this.translateService.currentLang) ? 'rtl' : 'ltr');
    }
}

您可以像这样订阅模块中的BehaviorSubject。

export class YourModule {
    constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) {
        this.languageHelper.language.subscribe((languageKey: string) => this.languageService.changeLanguage(languageKey));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JHipster 应用程序中延迟加载组件的 i18n 的相关文章

随机推荐

  • 从 ruby​​ on Rails 生成受密码保护的 zip 文件

    有没有人有幸在 Rails 中创建受密码保护的 zip 文件 我花了很多时间试图让 Chilkat 的 64 位 Linux gem 在 OSX 上运行 我将它列为已安装在我的 gem 列表中 但我始终无法实例化任何东西 我使用的是 1 9
  • C# .NET 4.6.1 实体框架 - 尽管未调用 DB.SaveChanges(),DB.MyTable.Add(...) 仍很慢

    A 这个版本是slow 持续时间以分钟为单位计算 DB 是 SQL Serve 数据库的典型 EF 数据上下文 AA Words 100是一个简单的 SQL Server 表 已添加到 EF 设计器 DB AA Words 100 Add被
  • FireStore fromSnapshot 与 fromMap 读取 DocumentSnapshot 的区别?

    我一直想知道使用哪个来读取 FireStore 快照 因为我可以使用 fromSnapshot 作为snapshot fieldName 工作得很好 现在 我在 Google Codelabs 中找到了一个示例https codelabs
  • y_test、sklearn 多标签分类上的 MultiLabelBinarizer 形状不一致错误

    import numpy as np import pandas as pd from sklearn pipeline import Pipeline from sklearn feature extraction text import
  • null == foo 与 foo == null [重复]

    这个问题在这里已经有答案了 这可能只是一个风格问题 但我正在读一本 Java 编码书 Android 编程 作者都在变量方法之前先声明 null 这是我不熟悉的做法 例如 if null foo code here or if null f
  • 改革语法以删除移位,减少 if-then-else 中的冲突

    如何消除给定语法的 bison 的移位归约冲突 selection stmt gt if expression statement if expression statement else statement 提供修改后的语法的解决方案将受
  • 使用SetTimer API时出现“运行时错误50290”如何处理?

    我在尝试在 Excel 中制作秒表计时器时遇到了此错误 这是一个简单的测试代码 使用按钮创建一个空的 Excel 工作簿 并为其分配一个宏 Sub Button1 Click TimerID SetTimer 0 0 0 5 1000 Ad
  • onHover 事件未在 Chart.js 中触发

    我想当鼠标在图表上移动时更改光标 例如这把小提琴 这适用于 Chart jsv2 4但不适用于v2 6 v2 7任何想法 var ctx document getElementById canvas1 getContext 2d var m
  • 脚本可以在本地主机上运行,​​但不能在服务器上运行

    我遇到这个问题 代码在本地主机上运行 但当我将其上传到服务器时却不起作用 我想实现这个 宝丽莱照片吧画廊 这是我的网站的链接 十二生肖 2013 Note 您需要进入图库选项卡才能查看它 EDIT 请使用 Google Chrome 浏览器
  • 寻找正则表达式来匹配 gmail plus 地址

    我目前使用这个 gmail com 我正在捕获一组加号之前和之后的文本 它适用于大多数情况 例如 email protected 但如果我尝试匹配说就会跌倒 email protected 重复的 号似乎把它搞砸了 任何帮助将非常感激 Th
  • 将 R Parallel 与其他 R 包一起使用

    我正在使用 R 中的 LQMM 包进行非常耗时的分析 我将模型设置为从星期四开始运行 现在是星期一 并且仍在运行 我对模型本身充满信心 作为标准 MLM 进行测试 并且对我的 LQMM 代码充满信心 已经使用相同的数据集运行了其他几个非常相
  • 检测用户存在

    我想做的是检测用户是否正在积极使用运行 Windows 2000 或更高版本 的计算机 最好 我想在不使用屏幕保护程序的情况下执行此操作 背景 我们有一个客户服务部门 位于寻线组中 可以 可用 或 不可用 如果他们 有空 呼叫将被路由到他们
  • 多个命令在 xcode 11.4 反应本机中产生错误我的副本包资源为空

    以下是xcode中的错误 我还尝试过从工作区设置构建旧版本 但未能成功 多个命令生成 Users saifubaid Library Developer Xcode DerivedData antispam bjwrxskogxnnophf
  • 如何在Linux内核中递归读取目录内容?

    我想实现一个树遍历函数 打印给定目录的所有内容 在内核中 我知道如何在用户空间中执行此操作 但我的要求是在内核空间中执行此操作 为此 我正在研究 vfs readdir 函数 并且对其用法有点困惑 假设我将从其他内核模块调用我的遍历函数 这
  • 如何设置 AlertDialog 的主题

    如何将警报主题设置为标准 Android 主题之一 我想使用 Holo Dark 因为弹出窗口默认为 Holo Light 我的代码 AlertDialog Builder confirm new AlertDialog Builder t
  • 如何使用 NSCache

    有人可以举例说明如何使用NSCache缓存字符串 或者有人有一个很好的解释的链接吗 我好像找不到啊 您使用它的方式与使用它的方式相同NSMutableDictionary 不同的是 当NSCache检测到内存压力过大 即缓存了太多值 它将释
  • PyCharm 中注释的折叠

    很长一段时间我一直在寻找一种在 PyCharm 中折叠注释的方法 基本上我一直在寻找一种方法来实现相同的目标 对于代码块的注释 很容易实现这一点 region Description all your comments go here en
  • 如何使用 javascript 更改 @keyframes 值?

    我想要做的是改变 0 和 100 的最高值 keyframes取决于 javascript 中的 x 等于什么 我之前已经使用 javascript 更改了 css 但我被困在这个上了 Code var x Math floor Math
  • 如何使用 Amazon Cognito 进行未经身份验证的访问?

    我创建了联合身份 Enabled 未经身份验证的访问与复选框 创建了与此身份关联的角色并赋予它管理员访问权限 所以它应该拥有所有权限 然后我添加此代码以将文件上传到 AWS S3 它与访问 密钥一起使用 我不想公开给 UI 但它不适用于 C
  • JHipster 应用程序中延迟加载组件的 i18n

    My App是基于JHipster因此语言服务是通过以下方式提供的智语言服务 in the ng jhipster库使用了一个Jhi配置服务配置ngx translate无需我在我的中导入和配置 TranslateModuleapp mod