webpack Vue.js -需要切换方向(rtl到ltr,反之亦然)而无需重新加载

nfg76nw0  于 2023-10-19  发布在  Webpack
关注(0)|答案(2)|浏览(202)

我正在使用Vue.js和vue-i18 n来切换我的项目语言,而不需要刷新。然而,当我想在阿拉伯语和其他任何东西之间切换时,我需要将网站的设计从(从右到左)改为(从左到右),反之亦然。
它目前是这样做的,所以我需要刷新来加载我的rtl.scss文件:
这是在刷新时加载css的代码:

  1. let locale = VueCookie.get('locale') || 'en'
  2. if (locale === 'ar') {
  3. require('rtl.scss')
  4. }

这是使页面刷新的代码:

  1. if (newLocale === 'ar' || oldLocale === 'ar') {
  2. window.location.reload()
  3. }
flvlnr44

flvlnr441#

从Jacob Goh的评论中,你可以做到以下几点:
将第一个代码段更改为:

  1. require('rtl.scss')
  2. let locale = VueCookie.get('locale') || 'en'
  3. if (locale === 'ar') {
  4. document.querySelector('body').classList.toggle('rtl');
  5. }

第二个是:

  1. if (newLocale === 'ar' || oldLocale === 'ar') {
  2. document.querySelector('body').classList.toggle('rtl');
  3. }

最后编辑你的rtl.scss文件:

  1. body.rtl {
  2. /* Old scss */
  3. }
展开查看全部
u7up0aaq

u7up0aaq2#

一个简单的替代公认的解决方案:

  1. const {t, locale} = i18n.global;
  2. watchEffect(() => {
  3. document.dir = t('text_direction');
  4. document.documentElement.lang = locale.value;
  5. })

需要为每种语言添加一个text_direction属性(如果有的话,至少在后备语言中),值为rtlltr。每当区域设置改变时,这将更新根文档元素到当前语言的正确方向。
如果有必要的话,你可以编写依赖于该属性的CSS。
这避免了为每种语言都设置一个需要不同方向的条件。

相关问题