0
0
mirror of https://github.com/sp-tarkov/server.git synced 2025-02-13 09:50:43 -05:00
server/project/src/services/LocalisationService.ts
Refringe 4ac12ef70a Formatting/Linting Changes (!168)
These are the formatting & linting configuration changes from the `3.8.0` branch and the changes that they make to the overall project.

The majority of these changes are from running two commands:

`npm run lint:fix`
`npm run style:fix`

This has already been run on the `3.8.0` branch and this PR should make `master` play nicer when it comes to merges going forward.

There are now four VSCode plugins recommended for server development. They've been added to the workspace file and a user should get a UI notification when the workspace is opened if they're not installed.

The four plugins are:
https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig
https://marketplace.visualstudio.com/items?itemName=dprint.dprint
https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
https://marketplace.visualstudio.com/items?itemName=biomejs.biome

Once installed they should just work within the workspace.

Also, be sure to `npm i` to get the new dprint application.

Co-authored-by: Refringe <brownelltyler@gmail.com>
Reviewed-on: SPT-AKI/Server#168
2023-11-16 21:42:06 +00:00

78 lines
2.5 KiB
TypeScript

import path from "node:path";
import { I18n } from "i18n";
import { inject, injectable } from "tsyringe";
import { ILocaleConfig } from "@spt-aki/models/spt/config/ILocaleConfig";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { LocaleService } from "@spt-aki/services/LocaleService";
import { RandomUtil } from "@spt-aki/utils/RandomUtil";
/**
* Handles translating server text into different langauges
*/
@injectable()
export class LocalisationService
{
protected localeConfig: ILocaleConfig;
protected i18n: I18n;
constructor(
@inject("WinstonLogger") protected logger: ILogger,
@inject("RandomUtil") protected randomUtil: RandomUtil,
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
@inject("LocaleService") protected localeService: LocaleService,
)
{
const localeFileDirectory = path.join(
process.cwd(),
globalThis.G_RELEASE_CONFIGURATION
? "Aki_Data/Server/database/locales/server"
: "./assets/database/locales/server",
);
this.i18n = new I18n({
locales: this.localeService.getServerSupportedLocales(),
defaultLocale: "en",
directory: localeFileDirectory,
retryInDefaultLocale: true,
});
this.i18n.setLocale(this.localeService.getDesiredServerLocale());
}
/**
* Get a localised value using the passed in key
* @param key Key to loop up locale for
* @param args optional arguments
* @returns Localised string
*/
public getText(key: string, args = undefined): string
{
return this.i18n.__(key.toLowerCase(), args);
}
/**
* Get all locale keys
* @returns string array of keys
*/
public getKeys(): string[]
{
return Object.keys(this.databaseServer.getTables().locales.server.en);
}
/**
* From the provided partial key, find all keys that start with text and choose a random match
* @param partialKey Key to match locale keys on
* @returns locale text
*/
public getRandomTextThatMatchesPartialKey(partialKey: string): string
{
const filteredKeys = Object.keys(this.databaseServer.getTables().locales.server.en).filter((x) =>
x.startsWith(partialKey)
);
const chosenKey = this.randomUtil.getArrayValue(filteredKeys);
return this.getText(chosenKey);
}
}