uniapp国际化以及在setup函数中的用法

uniapp本身就支持vue-i18n的国际化功能,只需稍作配置即可。虽说简单,但其中也有不少需要注意的。

目录结构

文件目录

┌ 根目录
|——locale
|  ├ index.js
|  ├ en.json
|  └ zh-Hans.json
|——pages
|——App.vue
|——main.js
1.设置main.js
import App from './App'
import messages from './locale/index'

let i18nConfig = {
  locale: 'en',
  messages
}

// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
Vue.prototype.$store = store
App.mpType = 'app'
const app = new Vue({
	store,
	...App
})
app.$mount()
// #endif

// #ifdef VUE3
import {
	createSSRApp
} from 'vue'
import { createI18n } from 'vue-i18n'
const i18n = createI18n(i18nConfig)
export function createApp() {
	const app = createSSRApp(App)
    app.use(i18n)
	return {
		app
	}
}
// #endif
2.添加locale配置文件
// locale/index.js
import en from './en.json'
import zhHans from './zh-Hans.json'
export default {
	en,
	'zh-Hans': zhHans,
}
// locale/zh-Hant.json
{
  "index.home": "首页",
  "index.share": "分享",
  "index.my": "我的"
}
// locale/en.json
{
  "index.home": "Home",
  "index.share": "Share",
  "index.my": "My"
}
3.添加语言切换组件
<template>
    <view class="top-bar">
        <view class="left">
            <view class="toggle" @click="changeLocal()">
                <view class="item">中</view>
                <view class="item">En</view>
                <view class="active" :class="{open: locale=='en'}"></view>
            </view>
        </view>
        <view class="center">
            {{$t("index.title")}}
        </view>
        <view class="right" style="width:100rpx;">
            
        </view>
    </view>
</template>

<script>
import {mapState} from 'vuex'
export default{
    data(){
        return {
            locale: uni.getLocale()
        }
    },
    computed:{
      ...mapState('app',['locale'])  
    },
    mounted(){
        const c = this.$store.state.app.locale
        const c1 = uni.getLocale()
        this.changeLocal(c)
        uni.setNavigationBarTitle({
            title: this.$t("index.home")
        })
    },
    methods:{
        changeLocal(l){
            const c = l ?l: this.locale=='en'?'zh-Hans':'en'
            uni.setLocale(c);
            this.$i18n.locale = c;
            this.locale = c
            uni.setTabBarItem({
                index: 0,
                text: this.$t("index.home")
            })
            uni.setTabBarItem({
                index: 2,
                text: this.$t("index.share")
            })
            uni.setTabBarItem({
                index: 4,
                text: this.$t("index.my")
            })
            if(!l){
                uni.reLaunch({
                    url: "/pages/home/home"
                })
            }
        }
    }
}

</script>

<style lang="scss" scoped>
.top-bar{
    height: 80rpx;
    line-height: 80rpx;
    display: flex;
    justify-content: space-between;
    align-items: center;
    color:#fff;
    background-color: $uni-color-primary;
    padding: 0 20rpx;
    .toggle{
        height: 60rpx;
        width: 100rpx;
        background-color: rgba(0,0,0,.2);
        border-radius: 60rpx;
        display: flex;
        color: #fff;
        position: relative;
        padding: 0 5rpx;
        .item{
            flex: 1;
            text-align: center;
            position: relative;
            z-index: 10;
            font-size: 26rpx;
            line-height: 60rpx;
        }
        .active{
            position: absolute;
            left: 5rpx;
            top: 5rpx;
            width: 50rpx;
            height: 50rpx;
            border-radius: 50rpx;
            background: $uni-color-primary;
            transition: all .3s;
            &.open{
                transform: translateX(50rpx);
            }
        }
    }
}
</style>

uniapp的vue3版本中的setup中的用法

<script setup>
import {useI18n} from 'vue-i18n'
const {t} = useI18n()

console.log(t('index.home'))
</script>

注意事项

全部的注意事项请移步到uniapp官网
https://uniapp.dcloud.net.cn/tutorial/i18n.html

1、小程序下不支持底部菜单国际化方案,但可以使用设置tabbar和navigationbar的API来设置文字。或者废弃原生tabbar和navigationbar,使用自定义方式。
2、切换语言后,某些已经打开过的tab页面有缓存,存在更新不及时问题,所以上面例子中每次切换强制reLaunch到首页。
3、uniapp自带组件默认翻译了英文版本,如果想翻译成其他自定义语言,请参考uniapp i18n

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程讲了Vue3+Vue2+Uni-app(uniapp)入门基础与实战,其还重点讲解了ES6、TypeScript这些基础知识,实战由两大价值5000元的真实企业级项目组成,分别是仿京东电商网站和仿美团微信点餐小程序,同时两大项目代码全部赠送,还赠送前后端架构模板,工作直接使用。VUE和uni-app是目前热门的前端框架,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件和插件,正式上线白屏问题,性能优化、解决iphoneX“刘海”兼容性问题、微信支付、微信授权登录,获取位置在地图上显示,获取用户所在的城市和街道信息,微信小程序发布审核等。对正在工作当或打算学习VUE和uni-app高薪就业的你来说,那么这门课程便是你手的葵花宝典。学习技巧:学习当不要只看,一定要多敲代码,如果碰到某一个知识点不是很明白,不要钻牛角尖,千万不要因为一个点,放弃整个森林,接着往下学,硬着头皮开发项目。只要能亲自开发一个完整的项目,你会发现不明白的地方自然而然就明白了,项目做出来就真正的学会了。此vue和uni-app课程以面试和实战为基础进行讲解,每个知识点都会让你知道在实际项目开发如何使用,学习后,可以开发大型项目,增强逻辑思维,至少让你拥有3年以上开发经验的实力!代码和ppt均可下载!免费提供《企业级完整实战项目接口文档》,绝对可用
要在 UniApp 使用 setup 函数,可以在页面或组件的 script 标签使用,如下所示: ```html <script> export default { setup() { // 在这里编写你的 setup 逻辑 } } </script> ``` 要将 scroll-view 内部的 table 回到顶部,你可以使用 scroll-view 的 `scroll-top` 属性来控制滚动位置。首先,给 scroll-view 组件添加一个 id,例如 `scroll-view`: ```html <scroll-view id="scroll-view" scroll-top="0" scroll-y> <!-- 这里是你的 table 内容 --> </scroll-view> ``` 然后,在 setup 函数,通过 `uni.createSelectorQuery()` 获取到 scroll-view 组件的实例,然后使用 `scrollTo()` 方法将滚动位置设置为 0,即回到顶部: ```javascript import { onMounted } from 'vue'; export default { setup() { onMounted(() => { const query = uni.createSelectorQuery(); query.select('#scroll-view').scrollOffset((rect) => { uni.pageScrollTo({ scrollTop: rect.scrollTop, duration: 300 }); }).exec(); }); } } ``` 上述代码使用了 Vue 3 的 `onMounted` 钩子函数,用于在页面加载完成后执行滚动逻辑。`uni.createSelectorQuery()` 可以获取到指定 id 的组件实例,并通过 `scrollOffset()` 获取滚动位置信息。然后使用 `uni.pageScrollTo()` 方法将滚动位置设置为 0,并指定动画过渡时间为 300ms。 这样,当页面加载完成后,table 内容会自动回到顶部。注意,需要在 `setup` 函数引入 `onMounted` 钩子函数,并确保 Vue 3.x 版本才能使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值