typeorm-i18n
v0.2.0-rc.1
Published
Translation tool for your typeorm models.
Downloads
594
Readme
typeorm-i18n 🚧
Translation tool for your typeorm models.
This package does not ready for production, but you can help me to do this! Let`s fork!
Installation
with yarn:
yarn add typeorm-i18n
with npm:
npm install typeorm-i18n
API
I18nColumn
I18nColumn(options: I18nColumnOptions)
Decorator for mark column as translatable.
I18nColumnOptions
Interface of configuration for
I18nColumn
.languages
- list of languages for that column. Example:['es', 'cn', 'en']
default_language
- default language ???
Entity configuration example:
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
import { I18nColumn } from "typeorm-i18n";
@Entity()
export class Photo {
@PrimaryGeneratedColumn() id!: number;
@I18nColumn({
languages: ["es", "cn", "en"],
default_language: "en",
})
@Column({ length: 500 })
name: string;
@Column() filename!: string;
}
I18nConnection
I18nConnection
is wrapper around regular typeorm's connection with overwritten methods and special EntityManager(I18nEntityManager
).
Overwritten methdos in I18nConnection
:
createQueryBuilder
- methods like original method intypeorm.Conneciton
, but this methods returnsI18nSelectQueryBuilder<Entity>
.getRepository
- methods like original method intypeorm.Conneciton
, but this methods returnsI18nRepository<Entity>
.
For getting I18nConnection
you can to use this functions:
getI18nConnection(connectionName?: string): I18nConnection
It is function for getting access to wrapper around already exist regular connection (typeorm's
Connection
). This function returnsI18nConnection
instance.createI18nConnection(options?: ConnectionOptions): Promise<I18nConnection>
It is funciton that create regular connection and returns wrapper around regular connection.
I18nRepository
It is like original Repository
from typeorm, but this class has additional methods:
locale(language: string): I18nRepository<Entity>
- configure locale for setting to fields.const photo_repository = i18n_connection.getRepository(Photo); photo_repository.locale("es"); const photo_es = photo_repository.findOne(); console.log(photo_es.name); // 'hom' photo_repository.locale("ru"); // change locale const photo_ru = photo_repository.findOne(); console.log(photo_ru.name); // 'дом'
I18nSelectQueryBuilder
I18nSelectQueryBuilder
it is special class that overwrite SelectQueryBuilder
from typeorm. This class provide additional method locale
.
Usage exmaples
Simple
Declare entity:
import { Entity, Column } from "typeorm";
import { I18nColumn } from "typeorm-i18n";
@Entity("articles")
export class Article extends BaseSeoEntity {
@I18nColumn({
default_language: "ru",
languages: ["ru", "en", "kg"],
})
@Column()
title: string;
@I18nColumn({
default_language: "ru",
languages: ["ru", "en", "kg"],
})
@Column({
type: "text",
})
body: string;
}
Get data:
import { createConnection, Connection } from "typeorm";
import { getI18nConnection } from "typeorm-i18n";
const connection = await createConnection({
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
});
const i18n_connection = getI18nConnection();
/* ... */
async function someFunction(): Promise<Post> {
const repo = i18n_connection.getRepository(Post);
const post = await repo.locale("fr").findOne();
return post;
}
/* ... */
With nestjs
For using this package with nestjs
you can to use @vlzh/nest-typeorm-i18n
CHANGELOG
0.0.7
- Upgrade typeorm version to
0.2.25
. - New prettier version
- Fix eslint configuratin for using prettier rules
- Add running of
fix
script in pre-commit hook - Note
@vlzh/nest-typeorm-i18n
inreadme.md
- Upgrade typeorm version to
TODO
- fix registration of another meta information about fields in
metadataArgsStorage
- write tests for
getTranslations
method and fix creating of a path in raw data(use methods from the transformer) - decide how to design creating-api
- readme/doc📄
- make more tests!☑️
- check example👆 and write more examples (by using glitch.com)
- (maybe🤔) exclude redundant fields from
Entity
and create api for access to translations - (maybe🤔) how to keep locale in a repository? (through creating of clones?)
- ... a lot of another todos
Development
For the running of test you need the running postgres instance, for this just execute next command:
Note! You should to have installed
docker engine
.
yarn [run] environment:start-db
after have started postgresql
you may to run tests:
yarn test
When you end of testing remove container with db:
yarn [run] environment:stop-db