+```
+
+### Writing Tests
+
+While not always fun, we encourage writing unit tests for any backend code changes. This will ensure the change is functioning as you intended and that future changes dont break the expected behavior.
+
+> We currently require 80% coverage on new code when submitting a PR
+{.is-info}
+
+If you have any questions about any of this, please let us know.
+
+# Translation
+
+Lidarr uses a self hosted open access [Weblate](https://translate.servarr.com) instance to manage its json translation files. These files are stored in the repo at `src/NzbDrone.Core/Localization`
+
+## Contributing to an Existing Translation
+
+Weblate handles synchronization and translation of strings for all languages other than English. Editing of translated strings and translating existing strings for supported languages should be performed there for the Lidarr project.
+
+The English translation, `en.json`, serves as the source for all other translations and is managed on GitHub repo.
+
+## Adding a Language
+
+Adding translations to Lidarr requires two steps
+
+- Adding the Language to weblate
+- Adding the Language to Lidarr codebase
+
+## Adding Translation Strings in Code
+
+The English translation, `src/NzbDrone.Core/Localization/en.json`, serves as the source for all other translations and is managed on GitHub repo. When adding a new string to either the UI or backend a key must also be added to `en.json` along with the default value in English. This key may then be consumed as follows:
+
+> PRs for translation of log messages will not be accepted
+{.is-warning}
+
+### Backend Strings
+
+Backend strings may be added utilizing the Localization Service `GetLocalizedString` method
+
+```dotnet
+private readonly ILocalizationService _localizationService;
+
+public IndexerCheck(ILocalizationService localizationService)
+{
+ _localizationService = localizationService;
+}
+
+var translated = _localizationService.GetLocalizedString("IndexerHealthCheckNoIndexers")
+```
+
+### Frontend Strings
+
+New strings can be added to the frontend by importing the translate function and using a key specified from `en.json`
+
+```js
+import translate from 'Utilities/String/translate';
+
+
+ {translate('UnableToAddANewIndexerPleaseTryAgain')}
+
+```