rxjs - i18n

目的

实现网页多语言的切换

依赖

react,rxjs,useObservable
感觉就是简单,简单,简单

实现

语言设定目录


src.png

type.ts ↓

export interface lang {
    /** 欢迎语 */
    hello: string
}

export type lang_type = 'en' | 'cn'

index.ts ↓

import { cn } from './cn'
import { en } from './en'
import { BehaviorSubject } from 'rxjs'
import { map } from 'rxjs/operators'
import { lang_type } from './type'

/** 多语言类型 */
export const lang_type$ = new BehaviorSubject<lang_type>('cn')

/** 多语言 */
export const lang$ = lang_type$.pipe(
    map((t) => {
        switch (t) {
            case 'en':
                return en
            default:
                return cn
        }
    }),
)

cn.ts ↓

import { lang } from './type'

export const cn: lang = {
    hello: '欢迎',
}

en.ts一致,就不再贴了

切换

简单的使用方法

import { lang$, lang_type$ } from '@/i18n'
export default function Index() {
    const l = useObservable(() => lang$)
    return <div className={s.Index}>{l?.hello}</div>
}

在任意位置lang$.next('en')即可切换英文

后记

实现起来实在是太简单了,一年前需要非常复杂的代码,今天竟如此简单

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容