def METHOD_NAME(self, **options):
    # Replace whitespace and other problematic characters with underscores
    def cleanup_name(text: str) -> str:
        return text.lower(). \
            replace(' ', '_'). \
            replace('-', '_'). \
            replace('/', '_'). \
            replace('(', '_'). \
            replace(')', '_')
    # Collect all translatable items
    data = [i for i in ExerciseCategory.objects.all()] \
           + [i for i in Equipment.objects.all()] \
           + [i.name_en for i in Muscle.objects.all() if i.name_en] \
           + [i for i in RepetitionUnit.objects.all()] \
           + [i for i in WeightUnit.objects.all()]
    # Make entries unique and sort alphabetically
    data = sorted(set([i.__str__() for i in data]))
    #
    # Django - write to .tpl file
    with open('wger/i18n.tpl', 'w') as f:
        out = '{% load i18n %}\n'
        for i in data:
            out += f'{{% translate "{i}" %}}\n'
        f.write(out)
        self.stdout.write(self.style.SUCCESS(f'Wrote content to wger/i18n.tpl'))
    #
    # React - copy the file to src/i18n.tsx in the react repo
    with open('wger/i18n.tsx', 'w') as f:
        out = '''
            // This code is autogenerated in the backend repo in extract-i18n.py do not edit!
            // Translate dynamic strings that are returned from the server
            // These strings such as categories or equipment are returned by the server
            // in English and need to be translated here in the application (there are
            // probably better ways to do this, but that's the way it is right now).
            import { useTranslation } from "react-i18next";
            // eslint-disable-next-line @typescript-eslint/no-unused-vars
            const DummyComponent = () => {
            const [t] = useTranslation();'''
        for i in data:
            out += f't("server.{cleanup_name(i.__str__())}");\n'
        out += '''
            return (<p></p>);
            };'''
        f.write(out)
        self.stdout.write(self.style.SUCCESS(f'Wrote content to wger/i18n.tsx'))
    #
    # Flutter - copy content to the end of lib/l10n/app_en.arb in the flutter repo
    with open('wger/app_en.arb', 'w') as f:
        out = ''
        for i in data:
            out += f'"{cleanup_name(i.__str__())}": "{i}",\n'
            out += f'"@{cleanup_name(i.__str__())}": {{ \n'
            out += f'"description": "Generated entry for translation for server strings"\n'
            out += '},\n'
        f.write(out)
        self.stdout.write(self.style.SUCCESS(f'Wrote content to app_en.arb'))
    # Copy to lib/helpers/i18n.dart in the flutter repo
    with open('wger/i18n.dart', 'w') as f:
        out = '''
        /// This code is autogenerated in the backend repo in extract-i18n.py do not edit!
        /// Translate dynamic strings that are returned from the server
        /// These strings such as categories or equipment are returned by the server
        /// in English and need to be translated here in the application (there are
        /// probably better ways to do this, but that's the way it is right now).
        import 'package:flutter/widgets.dart';
        import 'package:flutter_gen/gen_l10n/app_localizations.dart';
        String getTranslation(String value, BuildContext context) {
              switch (value) {'''
        for i in data:
            out += f'''
            case '{i}':
                return AppLocalizations.of(context).{cleanup_name(i.__str__())};
            '''
        out += '''
            default:
                throw FormatException('Could not translate the server string $value');
                }}'''
        f.write(out)
        self.stdout.write(self.style.SUCCESS('Wrote content to wger/i18n.dart'))