{"id":24639396,"url":"https://github.com/margosmat/translord","last_synced_at":"2026-04-20T05:06:27.900Z","repository":{"id":225390354,"uuid":"765416419","full_name":"margosmat/translord","owner":"margosmat","description":"translord - simple TMS to get your translations up and running in no time.","archived":false,"fork":false,"pushed_at":"2024-04-13T18:55:53.000Z","size":245,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-04-13T20:51:24.702Z","etag":null,"topics":["csharp","dotnet","tms"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/margosmat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-29T21:54:41.000Z","updated_at":"2024-04-15T19:34:58.242Z","dependencies_parsed_at":"2024-04-13T19:51:19.990Z","dependency_job_id":null,"html_url":"https://github.com/margosmat/translord","commit_stats":null,"previous_names":["margosmat/translord"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margosmat%2Ftranslord","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margosmat%2Ftranslord/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margosmat%2Ftranslord/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margosmat%2Ftranslord/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/margosmat","download_url":"https://codeload.github.com/margosmat/translord/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244600687,"owners_count":20479304,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","dotnet","tms"],"created_at":"2025-01-25T11:11:20.543Z","updated_at":"2026-04-20T05:06:27.870Z","avatar_url":"https://github.com/margosmat.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# translord\n\n---\n### Nuget\n\n[![NuGet Version](https://img.shields.io/nuget/v/translord?style=flat-square\u0026label=translord)](https://www.nuget.org/packages/translord)\n[![NuGet Version](https://img.shields.io/nuget/v/translord.DeepL?style=flat-square\u0026label=translord.DeepL)](https://www.nuget.org/packages/translord.DeepL)\n[![NuGet Version](https://img.shields.io/nuget/v/translord.EntityFramework?style=flat-square\u0026label=translord.EntityFramework)](https://www.nuget.org/packages/translord.EntityFramework)\n[![NuGet Version](https://img.shields.io/nuget/v/translord.EntityFramework.Postgres?style=flat-square\u0026label=translord.EntityFramework.Postgres)](https://www.nuget.org/packages/translord.EntityFramework.Postgres)\n[![NuGet Version](https://img.shields.io/nuget/v/translord.Manager?style=flat-square\u0026label=translord.Manager)](https://www.nuget.org/packages/translord.Manager)\n[![NuGet Version](https://img.shields.io/nuget/v/translord.RedisCache?style=flat-square\u0026label=translord.RedisCache)](https://www.nuget.org/packages/translord.RedisCache)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n  ![translord](assets/logo.jpeg)\n\n\u003c/div\u003e\n\n---\n\n#### translord - simple TMS to get your translations up and running in no time.\n\n🚧 Project still in the early stages of development \n\nWhat this tool aims to achieve? To be a central place in your project that handles all things related to your translations:\n- storing\n- translating\n- delivering\n- management\n- revision\n\n## Packages\n- translord\n    - The core library\n- [translord.DeepL](https://github.com/margosmat/translord/tree/main/translord.DeepL)\n    - Library containing [DeepL API](https://www.deepl.com/pro-api?cta=header-pro-api) configuration for texts translation in translord.\n- [translord.EntityFramework](https://github.com/margosmat/translord/tree/main/translord.EntityFramework)\n    - Library containing configuration data that uses EntityFramework as its database abstraction.\n- [translord.EntityFramework.Postgres](https://github.com/margosmat/translord/tree/main/translord.EntityFramework.Postgres)\n    - Library extending the `translord.EntityFramework` library with Postgres configuration.\n- [translord.Manager](https://github.com/margosmat/translord/tree/main/translord.Manager)\n    - Library containing the TMS admin panel allowing for translations editing/management/translation.\n- [translord.RedisCache](https://github.com/margosmat/translord/tree/main/translord.RedisCache)\n    - Library containing configuration for Redis as the cache for translord.\n\n## Configuration examples\n\n### WebApp with FileStore\n```c#\nbuilder.Services.AddTranslordFileStore(options =\u003e\n{\n    options.TranslationsPath = Path.Combine(Directory.GetCurrentDirectory(), \"translations\");\n});\nbuilder.Services.AddTranslord(o =\u003e\n{\n    List\u003cLanguage\u003e supportedLanguages = [Language.English, Language.Polish, Language.German];\n    o.SupportedLanguages = supportedLanguages;\n});\n```\n\n### WebApp with PostgresStore and TMS panel\n```c#\nbuilder.Services.AddTranslordPostgresStore(options =\u003e\n    options.ConnectionString = builder.Configuration.GetConnectionString(\"DefaultConnection\") ?? string.Empty);\nbuilder.Services.AddTranslord(o =\u003e\n{\n    List\u003cLanguage\u003e supportedLanguages = [Language.English, Language.Polish, Language.German];\n    o.SupportedLanguages = supportedLanguages;\n});\nbuilder.AddTranslordManager();\n```\n\n### Console app with FileStore\n```c#\nList\u003cLanguage\u003e supportedLanguages = [ Language.English, Language.Polish ];\nvar path = Path.Combine(Directory.GetCurrentDirectory(), \"translations\");\nvar deeplTranslator = new DeepLTranslator(new AddTranslordDeepLTranslatorOptions { AuthKey = \"your-auth-key\" });\nvar translator =\n    new TranslatorConfiguration(\n        new TranslatorConfigurationOptions { SupportedLanguages = supportedLanguages, DefaultLanguage = Language.English },\n        new FileStore(new FileStoreOptions { TranslationsPath = path }, null),\n        deeplTranslator).CreateTranslator();\n\nvar label = await translator.GetTranslation(\"label.test\", Language.Polish);\nvar translations = await translator.GetAllTranslations(Language.English);\n```\n\n### FileStore\nCore `translord` package contains the `FileStore` implementation. The only requirement is the `TranslationsPath` for the `FileStore` to load the translations from. Be sure that the directory exists, otherwise `FileStore` will throw an error.\n\n### Custom implementations\nYou can configure your own custom implementations for the **store**, **cache** or **translator** in translord. Just implement specific interface and be sure to register it in DI:\n```c#\nbuilder.Services.AddTranslordCustomStore\u003cCustomTranslationsStore\u003e();\nbuilder.Services.AddTranslordCustomCache\u003cCustomTranslationsCache\u003e();\nbuilder.Services.AddTranslordCustomTranslator\u003cCustomTranslationsTranslator\u003e();\n```\n\n## Import\nFor now, you can import your translations in one specific way. You need one `.json` file per language, with root object containing string key-value pairs of your translations. In the future there could be more import schemas added, please add an issue if you need support for specific import schema. Example of json that can be imported now:\n```json\n{\n    \"label.add\": \"add\",\n    \"label.delete\": \"delete\",\n    ...\n}\n```\n\n## TMS panel\n\n![TMS panel screenshot](assets/panel_screenshot.png)\n\n## Demo\n\n\nhttps://github.com/margosmat/translord/assets/25266191/198265df-2397-4b0d-ab4d-5172cdf6bd75\n\n\n## Examples\nPlease check [examples](https://github.com/margosmat/translord/tree/main/examples) folder for example projects using translord to manage translations.\n\n\n## Features\n\n- [x] modularity\n- [x] easy configuration\n- [x] storing (EF Core/Postgres/File)\n- [x] DeepL translations\n- [x] CMS-like panel\n- [x] import of existing translations\n- [x] caching (using Redis)\n- [x] examples\n\n### Ideas for the next features\n\n- [ ] AI based translations\n- [ ] role-based access to the CMS panel\n- [ ] translations revision\n\n## Inspiration\n\n- IdentityServer (as for config and ease of use)\n- Serilog (as for modularity, structure)\n\n## Support\n\nFeel free to add issues with suggestions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmargosmat%2Ftranslord","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmargosmat%2Ftranslord","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmargosmat%2Ftranslord/lists"}