You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
2.9 KiB

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
  1. <template>
  2. <view class="change-language">
  3. <!-- 选择语言弹出框 -->
  4. <u-popup :show="show" mode="bottom" @close="$emit('close');$play()">
  5. <view class="language-list">
  6. <view v-for="item in languageList" :key="item.key" class="language" :class="{ activeLanguage : currentLanguageKey === item.key}" @click="select(item)">{{ item.name }}</view>
  7. </view>
  8. <view class="language-btns">
  9. <view @click="$emit('close');$play()" class="btn">{{ $t('page.changeLanguage.cancel') }}</view>
  10. <view @click="changeLanguage(currentLanguage)" class="btn">{{ $t('page.changeLanguage.confirm') }}</view>
  11. </view>
  12. </u-popup>
  13. </view>
  14. </template>
  15. <script>
  16. export default {
  17. data(){
  18. return {
  19. languageList: [
  20. {
  21. name:'English',
  22. key : "en"
  23. },
  24. {
  25. name:'español',
  26. key : "es"
  27. }
  28. ],
  29. currentLanguage : {},
  30. currentLanguageKey : this.$i18n.locale
  31. }
  32. },
  33. props : {
  34. show : {
  35. type : Boolean,
  36. default : false
  37. }
  38. },
  39. methods : {
  40. //选择语言
  41. select(item){
  42. this.$play()
  43. this.currentLanguage = item;
  44. this.currentLanguageKey = item.key
  45. },
  46. //修改当前语言
  47. changeLanguage(res){
  48. this.$play()
  49. //#ifdef H5
  50. this.$router.go(0); //刷新页面,不然validate.js不好国际化
  51. //#endif
  52. //#ifdef APP-PLUS
  53. uni.navigateTo({
  54. url: '/pages/home/home' // 要刷新的页面路径
  55. });
  56. //#endif
  57. if(!res.key){
  58. return
  59. }
  60. this.curLanguage = res.key;
  61. // this.$store.commit('changeLanguage', res.key.code);
  62. uni.setStorage({
  63. key: 'language',
  64. data: res.key
  65. })
  66. this.$i18n.locale = res.key
  67. uni.setLocale(res.key) //切换语言环境必须在this.$i18n.locale之后,否则app端会有意想不到的bug
  68. this.$emit('close')
  69. uni.$resMessage = this.$t('message')
  70. }
  71. }
  72. }
  73. </script>
  74. <style lang="scss" scoped>
  75. .change-language{
  76. .language-list{
  77. border: 1px solid #ccc;
  78. width: 96%;
  79. margin: 0rpx auto 20rpx auto;
  80. .language{
  81. position: relative;
  82. display: flex;
  83. justify-content: center;
  84. align-items: center;
  85. color: $uni-text-color;
  86. height: 100rpx;
  87. border-bottom: 1px solid #ccc;
  88. font-size: 32rpx;
  89. &:last-child{
  90. border: none;
  91. }
  92. }
  93. .activeLanguage{
  94. &::after{
  95. position: absolute;
  96. top: 50%;
  97. right: 20rpx;
  98. content: "";
  99. width: 30rpx;
  100. height: 30rpx;
  101. border-radius: 50%;
  102. box-shadow: 0rpx 0rpx 30rpx $uni-bg-color-app;
  103. background: $uni-bg-color-app;
  104. transform: translateY(-50%);
  105. }
  106. }
  107. }
  108. .language-btns{
  109. display: flex;
  110. justify-content: space-between;
  111. flex-wrap: wrap;
  112. color: $uni-text-color;
  113. width: 96%;
  114. margin: 0rpx auto 20rpx auto;
  115. .btn{
  116. display: flex;
  117. align-items: center;
  118. justify-content: center;
  119. width: calc(50% - 15rpx);
  120. border: 1px solid #ccc;
  121. height: 80rpx;
  122. }
  123. }
  124. }
  125. </style>