switchLanguage.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <view class="page">
  3. <view class="btn-list">
  4. <view class="language" data-lang="zh-CN" @tap="langChange">
  5. <text>简体中文</text>
  6. <image
  7. v-if="languageSelect == 'zh-CN'"
  8. class="selected"
  9. src="../../static/mine/326.png"
  10. mode=""
  11. >
  12. </image>
  13. </view>
  14. <view class="language" data-lang="en-US" @tap="langChange">
  15. <text>English</text>
  16. <image
  17. v-if="languageSelect == 'en-US'"
  18. class="selected"
  19. src="../../static/mine/326.png"
  20. mode=""
  21. >
  22. </image>
  23. </view>
  24. <view class="language" data-lang="es-ES" @tap="langChange">
  25. <text>Español</text>
  26. <image
  27. v-if="languageSelect == 'es-ES'"
  28. class="selected"
  29. src="../../static/mine/326.png"
  30. mode=""
  31. >
  32. </image>
  33. </view>
  34. <view class="language" data-lang="it-IT" @tap="langChange">
  35. <text>Italiano</text>
  36. <image
  37. v-if="languageSelect == 'it-IT'"
  38. class="selected"
  39. src="../../static/mine/326.png"
  40. mode=""
  41. >
  42. </image>
  43. </view>
  44. </view>
  45. </view>
  46. </template>
  47. <script>
  48. import Vue from "vue";
  49. export default {
  50. data() {
  51. return {
  52. languageSelect: "",
  53. language: "cn",
  54. };
  55. },
  56. computed: {
  57. i18n() {
  58. return this.$t("index");
  59. },
  60. },
  61. methods: {
  62. update() {
  63. uni.$u.http
  64. .post("/api/member/update", {
  65. lang: this.language,
  66. })
  67. .then((res) => {
  68. this.$u.toast("切换成功");
  69. })
  70. .catch(() => {});
  71. },
  72. langChange(e) {
  73. const { lang } = e.currentTarget.dataset;
  74. uni.setStorageSync("language", lang);
  75. this._i18n.locale = lang;
  76. Vue.prototype._language = lang;
  77. this.languageSelect = lang;
  78. if (this.languageSelect == "zh-CN") {
  79. this.language = "cn";
  80. } else if (this.languageSelect == "en-US") {
  81. this.language = "en";
  82. } else if (this.languageSelect == "es-ES") {
  83. this.language = "es";
  84. } else if (this.languageSelect == "it-IT") {
  85. this.language = "ita";
  86. }
  87. this.update();
  88. uni.setNavigationBarTitle({
  89. title: this.i18n.switchLanguage,
  90. });
  91. },
  92. },
  93. created() {
  94. this.languageSelect = this._i18n.locale;
  95. uni.setNavigationBarTitle({
  96. title: this.i18n.switchLanguage,
  97. });
  98. },
  99. };
  100. </script>
  101. <style scoped lang="scss">
  102. .page {
  103. padding: 20rpx 24rpx;
  104. .btn-list {
  105. background-color: #fff;
  106. border-radius: 16rpx;
  107. padding: 0 20rpx;
  108. .language {
  109. display: flex;
  110. align-items: center;
  111. justify-content: space-between;
  112. height: 110rpx;
  113. border-bottom: 2rpx solid rgba(151, 151, 151, 0.2);
  114. .selected {
  115. width: 36rpx;
  116. height: 36rpx;
  117. }
  118. }
  119. }
  120. }
  121. </style>