{"id":20550938,"url":"https://github.com/ashampoo/ashampoo-translation-systems","last_synced_at":"2025-04-14T11:18:19.708Z","repository":{"id":58862233,"uuid":"528004179","full_name":"Ashampoo/Ashampoo-Translation-Systems","owner":"Ashampoo","description":"Open source repository for the formats used by the new translation studio.","archived":false,"fork":false,"pushed_at":"2024-09-30T11:22:42.000Z","size":1179,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-04-14T11:18:09.122Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ashampoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-23T13:30:08.000Z","updated_at":"2024-12-23T06:39:17.000Z","dependencies_parsed_at":"2024-02-28T10:45:40.136Z","dependency_job_id":"02f683cf-845f-4ae5-9b47-285f0bcfb04b","html_url":"https://github.com/Ashampoo/Ashampoo-Translation-Systems","commit_stats":null,"previous_names":["ashampoo/ashampoo-translation-systems"],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashampoo%2FAshampoo-Translation-Systems","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashampoo%2FAshampoo-Translation-Systems/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashampoo%2FAshampoo-Translation-Systems/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashampoo%2FAshampoo-Translation-Systems/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ashampoo","download_url":"https://codeload.github.com/Ashampoo/Ashampoo-Translation-Systems/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248868766,"owners_count":21174758,"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":[],"created_at":"2024-11-16T02:28:08.091Z","updated_at":"2025-04-14T11:18:19.675Z","avatar_url":"https://github.com/Ashampoo.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![build and test](https://github.com/Ashampoo/Ashampoo-Translation-Systems/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/Ashampoo/Ashampoo-Translation-Systems/actions/workflows/build-and-test.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue?style=flat-square)](https://github.com/Ashampoo/Ashampoo-Translation-Systems/blob/main/LICENSE)\n[![GitHub release (latest SemVer including pre-releases)](https://img.shields.io/github/v/release/Ashampoo/Ashampoo-Translation-Systems?display_name=tag\u0026include_prereleases\u0026sort=semver\u0026style=flat-square)](https://github.com/Ashampoo/Ashampoo-Translation-Systems/releases/latest)\n[![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Ashampoo.Translation.Systems.Formats?color=green\u0026label=Formats\u0026style=flat-square)](https://www.nuget.org/packages/Ashampoo.Translation.Systems.Formats)\n[![Nuget (with prereleases)](https://img.shields.io/nuget/vpre/Ashampoo.Translation.Systems.Formats.Abstractions?color=green\u0026label=Abstractions\u0026style=flat-square)](https://www.nuget.org/packages/Ashampoo.Translation.Systems.Formats.Abstractions)\n# Ashampoo-Translation-Systems\n\n## Description\nThis repository contains the source code for a system for working with translation files.\n\n## Installation\nTo use the system, you need to install the following dependencies from NuGet:\n\n[Ashampoo.Translation.Systems.Formats.Abstractions](https://www.nuget.org/packages/Ashampoo.Translation.Systems/) if you only want to use the interfaces and base classes, and not the format implementations.\\\n[Ashampoo.Translation.Systems.Formats](https://www.nuget.org/packages/Ashampoo.Translation.Systems.Formats/) if you want to use the complete system, including the format implementations.\\\nIf you only want to use specific formats, you can install the corresponding packages directly.\\\n\\\nTo register all your installed formats with the `IServiceCollection`, you need to call the following methods:\n```c#\nusing Ashampoo.Translation.Systems.Formats.Abstractions;\n\nservices.RegisterFormats();\n```\nIf you want to register only specific formats, you can register them manually with your `IServiceCollection`:\n```c#\nusing Ashampoo.Translation.Systems.Formats.MyFormat;\n\nservices.AddFormatFactory();\nservices.RegisterFormat\u003cMyFormat\u003e();\n```\n\u003e NOTE: If you want to register multiple formats individually, you only need to call `services.AddFormatFactory()` once.\n\n\n## Supported Formats\n\n### AshLang\nAshLang is a file format for storing translations with their english original text.\\\nAn AshLang file is a binary file.\\\nWe recommend not to use this format for storing translations, because it is an internal format of Ashampoo,\\\nand is not human-readable.\n\n### Gengo\nThe Gengo format is a simple format for storing translations.\\\nIt is meant to be used for sending it to [Gengo](https://gengo.com/) for translating.\\\nGengo is based on Excel (.xlsx) and has a specific structure:\n\n|    [[[ ID ]]]     |    source     |    target     |\n|:-----------------:|:-------------:|:-------------:|\n| [[[ first id ]]]  | first source  | first target  |\n| [[[ second id ]]] | second source | second target |\n| [[[ third id ]]]  | third source  | third target  |\n\nAs you can see, the ids are always in the first column and the source and target are in the second and third columns.\nAlso, the ids are inside of 3 square brackets.\\\nThis is because Gengo doesn't translates strings that are in three square brackets.\n\n### Json\nThe Json format is a simple format for storing translations.\\\nIt is a JSON file with the following structure:\n\n```json\n{\n  \"first id\": \"first target\",\n  \"second id\": \"second target\",\n  \"third id\": \"third target\"\n}\n```\nJson also supports nested objects:\n\n```json\n{\n  \"first id\": \"first target\",\n  \"second id\": \"second target\",\n  \"third id\": {\n    \"first nested id\": \"first nested target\",\n    \"second nested id\": \"second nested target\",\n    \"third nested id\": \"third nested target\"\n  }\n}\n```\nThe id for translations in nested objects is constructed by concatenating the ids of the parent objects with a `/` .\\\nFor example, the id for the first nested id is `third id/first nested id`.\n\nAdditionally, arrays are supported:\n\n```json\n{\n  \"first id\": [\n    \"first target\",\n    \"second target\",\n    \"third target\"\n  ]\n}\n```\nThe id for translations in arrays is constructed by concatenating the id of the parent object with a `/` and the index of the array.\\\nFor example, the id for the first target is `first id/0`.\n\n### NLang\nNLang is a simple key-value format.\n```\nfirstId=firstTarget\nsecondId=secondTarget\nthirdId=thirdTarget\n```\n\n### PO\nThe [PO](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html) format is a simple format for storing translations.\\\nIt is a text file with the following structure:\n\n```po\nmsgid \"first source\"\nmsgstr \"first target\"\n\nmsgid \"second source\"\nmsgstr \"second target\"\n\nmsgid \"third source\"\nmsgstr \"third target\"\n```\n\nPo files can also contain comments, and context.\\\nBoth can be used to store additional information about the translation.\\\nAt the moment, context and comments in files are accepted as inputs, but are not properly handled.\\\nIf a translation has a context, the id of the translation is constructed by concatenating the context with a `/` and the id.\\\nFor the full documentation of the PO format, see the [GNU gettext manual](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html).\n\n### Resx\nThe Resx format is a simple format for storing translations.\\\nIt is a XML file with the following structure:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003croot\u003e\n  \u003cdata name=\"first id\"\u003e\n    \u003cvalue\u003efirst target\u003c/value\u003e\n  \u003c/data\u003e\n  \u003cdata name=\"second id\"\u003e\n    \u003cvalue\u003esecond target\u003c/value\u003e\n  \u003c/data\u003e\n  \u003cdata name=\"third id\"\u003e\n    \u003cvalue\u003ethird target\u003c/value\u003e\n  \u003c/data\u003e\n\u003c/root\u003e\n```\nFor more information about the Resx format, see the [Microsoft documentation](https://docs.microsoft.com/en-us/dotnet/framework/resources/creating-resource-files-for-desktop-apps#resx-files).\n\n### TsProj\nTsProj is a file format for storing translation strings in a .tsproj file.\\\nIt is a xml based format, intended to use with the Ashampoo Translation Studio,\nwith the following structure:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cproject name=\"My Project\" version=\"1.0\" author=\"Author\" mail=\"author@email.com\" source_language=\"source_language\"\ntarget_language=\"target_language\"\u003e\n    \u003ccomponent pluginguid=\"{F0D8F625-2EE3-4C84-96EC-BFBDD4946878}\"\u003e\n        \u003ctranslation id=\"first id\"\u003e\n            \u003ccomment\u003efirst comment\u003c/comment\u003e\n            \u003csource\u003efirst source\u003c/source\u003e\n            \u003ctarget\u003efirst target\u003c/target\u003e\n        \u003c/translation\u003e\n        \u003ctranslation id=\"second id\"\u003e\n            \u003ccomment\u003esecond comment\u003c/comment\u003e\n            \u003csource\u003esecond source\u003c/source\u003e\n            \u003ctarget\u003esecond target\u003c/target\u003e\n        \u003c/translation\u003e\n        \u003ctranslation id=\"third id\"\u003e\n            \u003ccomment\u003ethird comment\u003c/comment\u003e\n            \u003csource\u003ethird source\u003c/source\u003e\n            \u003ctarget\u003ethird target\u003c/target\u003e\n        \u003c/translation\u003e\n    \u003c/component\u003e\n\u003c/project\u003e\n```\n\n\n\n## License\nThis project is licensed under the MIT license.\n\n## Contributing\nContributions are always welcome!\\\nPlease read the [contribution guidelines](CONTRIBUTING.md) first.\n\n## Code of Conduct\nThis project and everyone participating in it is governed by the [Code of Conduct](CODE_OF_CONDUCT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashampoo%2Fashampoo-translation-systems","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fashampoo%2Fashampoo-translation-systems","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashampoo%2Fashampoo-translation-systems/lists"}