{"id":15130918,"url":"https://github.com/henestrosadev/mobile-strings-converter","last_synced_at":"2025-10-23T07:30:51.142Z","repository":{"id":65824197,"uuid":"599773541","full_name":"HenestrosaDev/mobile-strings-converter","owner":"HenestrosaDev","description":"Convert Android \u0026 iOS string files to any supported file type, and vice versa.","archived":false,"fork":false,"pushed_at":"2024-08-26T12:28:25.000Z","size":30808,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-29T20:50:53.649Z","etag":null,"topics":["android","android-strings","csv","developer-tool","file-converter","gspread","html","json","ods","openpyxl","python","python-package","utility","xlsx","yaml"],"latest_commit_sha":null,"homepage":"","language":"Python","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/HenestrosaDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","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,"publiccode":null,"codemeta":null}},"created_at":"2023-02-09T21:11:37.000Z","updated_at":"2024-08-26T12:28:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"3e46c179-150c-49fc-8e47-2c5b6fcc0199","html_url":"https://github.com/HenestrosaDev/mobile-strings-converter","commit_stats":{"total_commits":146,"total_committers":1,"mean_commits":146.0,"dds":0.0,"last_synced_commit":"04cbb1ad5dd674f9b70208041f3d196a7042cf3f"},"previous_names":["henestrosadev/mobile-strings-converter","henestrosaconh/mobile-strings-converter","henestrosaconh/android-strings-converter"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenestrosaDev%2Fmobile-strings-converter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenestrosaDev%2Fmobile-strings-converter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenestrosaDev%2Fmobile-strings-converter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HenestrosaDev%2Fmobile-strings-converter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HenestrosaDev","download_url":"https://codeload.github.com/HenestrosaDev/mobile-strings-converter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237793943,"owners_count":19367422,"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":["android","android-strings","csv","developer-tool","file-converter","gspread","html","json","ods","openpyxl","python","python-package","utility","xlsx","yaml"],"created_at":"2024-09-26T03:08:30.677Z","updated_at":"2025-10-23T07:30:49.736Z","avatar_url":"https://github.com/HenestrosaDev.png","language":"Python","funding_links":["https://ko-fi.com/henestrosadev"],"categories":[],"sub_categories":[],"readme":"\u003cdiv id=\"top\"\u003e\u003c/div\u003e\n\n\u003c!-- PROJECT SHIELDS --\u003e\n\u003c!--\n*** I am using markdown \"reference style\" links for readability.\n*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).\n*** See the bottom of this document for the declaration of the reference variables\n*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.\n*** https://www.markdownguide.org/basic-syntax/#reference-style-links\n--\u003e\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n\t\u003cimg \n\t\tsrc=\"docs/icon.png\" \n\t\talt=\"Logo\" \n\t\twidth=\"156\" \n\t\theight=\"156\"\n\t\u003e\n\t\t\u003ch1 align=\"center\"\u003eMobile Strings Converter\u003c/h1\u003e\n\t\t\u003cp align=\"center\"\u003e\n\t\t\tConvert Android \u0026 iOS string files to any supported file type, and vice versa.\n\t\t\u003c/p\u003e\n\t\t\u003cp\u003e\n\t\t\t\u003ca href=\"https://pypi.org/project/mobile-strings-converter/\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"PyPI version\" \n\t\t\t\t\tsrc=\"https://img.shields.io/pypi/v/mobile-strings-converter\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\t\u003ca href=\"https://pypi.org/project/mobile-strings-converter/\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"Python versions support\" \n\t\t\t\t\tsrc=\"https://img.shields.io/pypi/pyversions/mobile-strings-converter\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\t\u003cbr /\u003e\n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/actions/workflows/build.yaml\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"GitHub action: Build\" \n\t\t\t\t\tsrc=\"https://github.com/HenestrosaDev/mobile-strings-converter/actions/workflows/build.yaml/badge.svg\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\t\u003ca href=\"https://codecov.io/gh/HenestrosaDev/mobile-strings-converter/\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"Codecov\" \n\t\t\t\t\tsrc=\"https://codecov.io/gh/HenestrosaDev/mobile-strings-converter/branch/main/graph/badge.svg\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/blob/main/LICENSE\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"License\" \n\t\t\t\t\tsrc=\"https://img.shields.io/github/license/HenestrosaDev/mobile-strings-converter\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\t\u003cbr /\u003e\n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/graphs/contributors\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"GitHub Contributors\" \n\t\t\t\t\tsrc=\"https://img.shields.io/github/contributors/HenestrosaDev/mobile-strings-converter\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/issues\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"Issues\" \n\t\t\t\t\tsrc=\"https://img.shields.io/github/issues/HenestrosaDev/mobile-strings-converter\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/pulls\"\u003e\n\t\t\t\t\u003cimg \n\t\t\t\t\talt=\"GitHub pull requests\" \n\t\t\t\t\tsrc=\"https://img.shields.io/github/issues-pr/HenestrosaDev/mobile-strings-converter\" \n\t\t\t\t/\u003e\n\t\t\t\u003c/a\u003e\n\t\t\u003c/p\u003e\n\t\t\u003cp\u003e\n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/issues/new/choose\"\u003e\n\t\t\t\tReport Bug\n\t\t\t\u003c/a\u003e \n\t\t\t· \n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/issues/new/choose\"\u003e\n\t\t\t\tRequest Feature\n\t\t\t\u003c/a\u003e \n\t\t\t· \n\t\t\t\u003ca href=\"https://github.com/HenestrosaDev/mobile-strings-converter/discussions\"\u003e\n\t\t\t\tAsk Question\n\t\t\t\u003c/a\u003e\n\t\t\u003c/p\u003e\n\u003c/div\u003e\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\n## Table of Contents\n\n- [About the Project](#about-the-project)\n\t- [File Types Supported](#file-types-supported)\n\t- [Project Structure](#project-structure)\n\t- [Built With](#built-with)\n- [Getting Started](#getting-started)\n\t- [Script Installation](#script-installation)\n\t- [Package Installation](#package-installation)\n- [Usage](#usage)\n\t- [Running the Program](#running-the-program)\n\t\t- [Script Arguments](#script-arguments)\n\t\t\t- [Positional Arguments](#positional-arguments)\n            - [Options](#options)\n\t- [Using the Package in Your Project](#using-the-package-in-your-project)\n\t- [Generating a Spreadsheet in Google Sheets](#generating-a-spreadsheet-in-google-sheets)\n\t\t- [Setting Up a Google Account](#setting-up-a-google-account)\n\t\t- [Using the `to_google_sheets` Function in Your Project](#using-the-to_google_sheets-function-in-your-project)\n- [Notes](#notes)\n\t- [Indic Languages Supported by PDF Files](#indic-languages-supported-by-pdf-files)\n\t- [Languages Not Supported by PDF Files](#languages-not-supported-by-pdf-files)\n- [Troubleshooting](#troubleshooting)\n\t- [iOS](#ios)\n- [Roadmap](#roadmap)\n- [Contributing](#contributing)\n- [License](#license)\n- [Authors](#authors)\n- [Acknowledgments](#acknowledgments)\n- [Support](#support)\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n\n## About the Project\n\nI have tried to do the whole process of converting a strings resource file into a spreadsheet in Google Sheets by hand, and although you can do it with the **Data \u003e Split text to columns** option,\nit is a waste of time to generate the spreadsheet manually. Also, you are limited to spreadsheet files only. For this reason, I decided to create a time-efficient solution that consists of running\na Python script to do this with any file type.\n\nIn addition to being able to run this script on its own, it can also be installed as a package via **PyPI** (more information on how to install it [here](#use-the-package-in-your-project)).\n\n\u003c!-- FILE TYPES SUPPORTED --\u003e\n\n### File Types Supported\n\n- Android strings format (`*.xml`)\n- CSV\n- Google Sheets support\n- HTML\n- iOS strings format (`*.strings`)\n- JSON\n- MD\n- ODS\n- PDF\n- XLSX\n- YAML\n\n\u003c!-- PROJECT STRUCTURE --\u003e\n\n### Project Structure\n\n\u003cdetails\u003e\n\t\u003csummary\u003eASCII directory structure\u003c/summary\u003e\n\n```\n/\n│   .gitignore\n│   .pre-commit-config.yaml\n│   LICENSE\n│   poetry.lock\n│   pyproject.toml\n│   README.md\n│   requirements.txt\n│   requirements-dev.txt\n│\n├───.github\n│   │   CONTRIBUTING.md\n│   │   dependabot.yml\n│   │\n│   ├───ISSUE_TEMPLATE\n│   │       bug_report_template.md\n│   │       feature_request_template.md\n│   │\n│   ├───PULL_REQUEST_TEMPLATE\n│   │       pull_request_template.md\n│   │\n│   └───workflows\n│           build.yaml\n│           publish.yaml\n│\n├───docs\n│       icon.png\n│\n├───src\n│   └───mobile_strings_converter\n│       │   console_style.py\n│       │   converter.py\n│       │   __init__.py\n│       │   __main__.py\n│       │\n│       └───assets\n│           └───fonts\n│                   Aakar.ttf\n│                   AnekTelugu-VariableFont_wdth,wght.ttf\n│                   DejaVuSansCondensed.ttf\n│                   Eunjin.ttf\n│                   fireflysung.ttf\n│                   gargi.ttf\n│                   Gurvetica_a8_Heavy.ttf\n│                   Latha.ttf\n│                   Waree.ttf\n│\n└───tests\n    │   base_tests.py\n    │   test_android.py\n    │   test_csv.py\n    │   test_get_strings.py\n    │   test_html.py\n    │   test_ios.py\n    │   test_json.py\n    │   test_md.py\n    │   test_ods.py\n    │   test_pdf.py\n    │   test_xlsx.py\n    │   test_yaml.py\n    │\n    └───files\n        ├───input\n        │       Localizable.strings\n        │       strings.xml\n        │\n        ├───template-with-comments\n        │       Localizable.strings\n        │       strings.csv\n        │       strings.html\n        │       strings.json\n        │       strings.md\n        │       strings.ods\n        │       strings.pdf\n        │       strings.xlsx\n        │       strings.xml\n        │       strings.yaml\n        │\n        └───template-without-comments\n                Localizable.strings\n                strings.csv\n                strings.html\n                strings.json\n                strings.md\n                strings.ods\n                strings.pdf\n                strings.xlsx\n                strings.xml\n                strings.yaml\n```\n\n\u003c/details\u003e\n\n\u003c!-- BUILT WITH --\u003e\n\n### Built With\n\n- [openpyxl](https://pypi.org/project/openpyxl/) to generate ODS and XLSX files.\n- [gspread](https://pypi.org/project/gspread/) to generate spreadsheets in Google Sheets.\n- [protobuf](https://pypi.org/project/oauth2client/) is used by `google.oauth2.credentials` to authenticate to the user's Google account in order to create the spreadsheet in Google Sheets.\n- [PyYAML](https://pypi.org/project/PyYAML/) to generate YAML files.\n- [arabic-reshaper](https://pypi.org/project/arabic-reshaper/) and [python-bidi](https://pypi.org/project/python-bidi/) to add arabic characters support for PDF files.\n- [fpdf2](https://pypi.org/project/fpdf2/) to generate PDF files.\n- [lingua-language-detector](https://pypi.org/project/lingua-language-detector/) to recognize the **value** language when writing a PDF in order to know what font to use.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- GETTING STARTED --\u003e\n\n## Getting Started\n\n### Script Installation\n\n1. Download the `.zip` file from the [latest release](https://github.com/HenestrosaDev/mobile-strings-converter/releases/latest/).\n2. (Optional but recommended) Create a Python virtual environment in the project root. If you're using `virtualenv`, you would run `virtualenv venv`.\n3. (Optional but recommended) Activate the virtual environment:\n\n\t ```bash\n\t # on Windows\n\t . venv/Scripts/activate\n\t # if you get the error `FullyQualifiedErrorId : UnauthorizedAccess`, run this:\n\t Set-ExecutionPolicy Unrestricted -Scope Process\n\t # and then . venv/Scripts/activate\n\n\t # on macOS and Linux\n\t source venv/Scripts/activate\n\t ```\n\n4. Open the command line and run `pip install -r path/to/requirements.txt` to install the required packages to run the script.\n\n### Package Installation\n\nInstall the PyPI package by running `pip install mobile-strings-converter`.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- USAGE --\u003e\n\n## Usage\n\n### Running the Program\n\nTo convert one file to another file:\n\n```\npython path/to/mobile_strings_converter.py *.[SUPPORTED_FILE_TYPE] -f *.[SUPPORTED_FILE_TYPE]\n```\n\n---\n\nTo include the comments of the `.xml`/`.strings` input file in the output file, add the `-p` (or `--print-comments`) option. Note that it will be ignored for other input file types.\n\n```\npython path/to/mobile_strings_converter.py *.[SUPPORTED_FILE_TYPE] -f *.[SUPPORTED_FILE_TYPE] -p\n```\n\n---\n\nTo convert multiple files at once and save them in the specified directory specified with the `-d` option, use the`-t` option followed by the desired file type extension (e.g., `.json`). Note that the program will create the directory if it doesn't exist.\n\n```\npython path/to/mobile_strings_converter.py *.[SUPPORTED_FILE_TYPE] *.[SUPPORTED_FILE_TYPE] *.[SUPPORTED_FILE_TYPE] -d [DIR_PATH] -t [TARGET_TYPE]\n```\n\n---\n\nTo convert supported files in a directory and its subdirectories and save them to a directory:\n\n```\npython path/to/mobile_strings_converter.py [INPUT_DIR_PATH] -d [OUTPUT_DIR_PATH] -t [TARGET_TYPE]\n```\n\n---\n\nTo convert supported files in multiple directories and their subdirectories and save them to a directory:\n\n```\npython path/to/mobile_strings_converter.py [INPUT_DIR_PATH_1] [INPUT_DIR_PATH_2] [INPUT_DIR_PATH_3] -d [OUTPUT_DIR_PATH] -t [TARGET_TYPE]\n```\n\n---\n\nFor multiple file inputs and directories, the name of the files will be the same as the input file. For example, if there is a file named `spanish.xml` in a directory, the output file name will be `spanish.[TARGET_TYPE]`\n\nSee the [Generating a Spreadsheet in Google Sheets](#generating-a-spreadsheet-in-google-sheets) section to create a spreadsheet in your Google account.\n\n---\n\n#### Script Arguments\n\nA full list of the program command's options are as follows:\n\n##### Positional Arguments\n\n| POSITIONAL ARGUMENT | DESCRIPTION                                                                                                            |\n|:--------------------|:-----------------------------------------------------------------------------------------------------------------------|\n| `input_paths`       | Files or directory paths of supported files to convert. See [the list of supported file types](#file-types-supported). |\n\n##### Options\n\n| OPTION                                                  | DESCRIPTION                                                                                                                                                                                                                                                    |\n|:--------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `-h, --help`                                            | Show the help text and exit.                                                                                                                                                                                                                                   |\n| `-v, --version`                                         | Show script version info and exit.                                                                                                                                                                                                                             |\n| `-f FILE_PATH, --output-file FILE_PATH`                 | File path to save the converted file. Only works if only one input file is provided. See [the list of supported file types](#file-types-supported).                                                                                                            |\n| `-d DIR_PATH, --output-dir DIR_PATH`                    | Directory path where the converted files will be saved. Compatible with single and multiple input files as well as directories. The specified directory will be created if it does not already exist.                                                          |\n| `-t FILE_TYPE, --target-type FILE_TYPE`                 | Target file type to convert the files. Required when specifying multiple file paths or `--output-dir`. See [the list of supported file types](#file-types-supported).                                                                                          |\n| `-g CREDENTIALS_PATH, --google-sheets CREDENTIALS_PATH` | Create a Google spreadsheet with the output in your Google account. You must specify the `service_account.json` path. You can learn how to generate it in the [Generating a Spreadsheet in Google Sheets](#generating-a-spreadsheet-in-google-sheets) section. |\n| `-p, --print-comments`                                  | Print commented strings from the input file to the output file. Only valid for `.xml` or `.strings` input file types, otherwise it is ignored.                                                                                                                 |\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Using the Package in Your Project\n\nAfter following the steps in the [Getting Started](#getting-started) section, import the package and the wrapper function(s) you want to use:\n\n```python\n# Using the `get_strings` function\nfrom mobile_strings_converter import get_strings\n\nget_strings(\n\tinput_filepath=Path(\"strings.xml\"),\n\twith_comments=True\n)\n```\n\n### Generating a Spreadsheet in Google Sheets\n\n#### Setting Up a Google Account\n\nBefore going further into running the commands to do this, note that you need to generate a `service_account.json` file. Follow these steps to get one:\n\n1. Go to the [Google Cloud Console](https://console.cloud.google.com/).\n2. Create a new project or select an existing project.\n3. Go to the **APIs \u0026 Services** page, click on **Dashboard** and then click on **Enable APIs and Services**.\n4. Search for **Google Sheets API** and enable it.\n5. Go to the **Credentials** page, click on **Create credentials**, and then choose **Service account**.\n6. Give your service account a name and select a role. For this purpose, you can select **Project -\u003e Editor**.\n7. Click on the **Create key** button, select the JSON format and download the `service_account.json` file.\n8. Share your Google Sheets file with the email address that is specified in the **client_email** field in the `service_account.json` file.\n\nAlternatively, you can create an `.xlsx` file and open it in Google Sheets if you do not want to go through the hassle of generating the `service_account.json` file.\n\nOnce you have the `service_account.json` file, you can create a spreadsheet in Google Sheets by running the following command:\n\n```\npython path/to/mobile_strings_converter.py *.[SUPPORTED_FILE_TYPE] -g -c path/to/service_account.json\n```\n\nIf you want to generate an output file along with the spreadsheet, run this:\n\n```\npython path/to/mobile_strings_converter.py *.[SUPPORTED_FILE_TYPE] -g -c path/to/service_account.json -o *.[SUPPORTED_FILE_TYPE]\n```\n\nThe name of the sheet will be the same as the name of the input file.\n\n#### Using the `to_google_sheets` Function in Your Project\n\n```python\nfrom mobile_strings_converter import to_google_sheets\n\nto_google_sheets(\n\tinput_filepath=Path(\"path/to/strings-file\"),\n\tsheet_name=\"MyProject strings\",\n\tcredentials_filepath=Path(\"path/to/service_account.json\"),\n\twith_comments=True,\n)\n```\n\n\u003c!-- NOTES --\u003e\n\n## Notes\n\n### Indic Languages Supported by PDF Files\n\n- Hindi\n- Marathu\n- Oriya\n- Tibetan\n- Gujarati\n- Telugu\n- Tamil\n- Punjabi\n\n### Languages Not Supported by PDF Files\n\n- Bengali \u003csub\u003e(not possible to print correctly using [fpdf2](https://pypi.org/project/fpdf2/))\u003c/sub\u003e\n- Dhivehi \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n- Kannada \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n- Khmer \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n- Lao \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n- Malayalam \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n- Meiteilon (manipuri) \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n- Myanmar burmese \u003csub\u003e(not possible to print correctly using [fpdf2](https://pypi.org/project/fpdf2/))\u003c/sub\u003e\n- Odia (Oriya) \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\u003c/sub\u003e\n- Sinhala \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n- Tigrinya \u003csub\u003e(not recognized by [lingua-language-detector](https://pypi.org/project/lingua-language-detector/))\u003c/sub\u003e\n\n## Troubleshooting\n\n### iOS\n\nYou may encounter this error on iOS when using a generated `.strings` file:\n\n```\nvalidation failed: Couldn't parse property list because the input data was in an invalid format\n```\n\nThis is because the input file has double quotes in some NAME or VALUE. To identify the line with the error, you have to do the following on macOS:\n\n1. `cd` into your project root.\n2. `cd [LANGUAGE_CODE].lproj` (e.g., `cd es.lproj`)\n3. `plutil -lint Localizable.strings`\n\nWhen you run step 3, you will either get an error telling you what is wrong with your file, or you will be told that the file is correct.\n\n✅ Success output example:\n\n```\n╰─➤  plutil -lint Localizable.strings\nLocalizable.strings: OK\n```\n\n❌ Error output example:\n\n```\n╰─➤  plutil -lint Localizable.strings\n2024-06-05 11:04:08.614 plutil[86874:16115488] CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 293. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.\nLocalizable.strings: Unexpected character \" at line 1\n```\n\n\u003e [!NOTE]\n\u003e The last line of the `plutil` output on error will always be `Unexpected character at line 1`. However, the real error is in the line above, where it says that the error is on line 293 due to a missing semicolon.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- ROADMAP --\u003e\n\n## Roadmap\n\n- [x] Add support for converting a file (not `.xml` or `.strings`) into a strings resource file (`.xml` or `.strings`).\n- [x] Add support for multiple files input.\n- [x] Add support for accepting the path to a directory as input.\n- [x] Add support for accepting the path to a directory as output.\n- [ ] Make brew (macOS) formula.\n- [ ] Make a web version.\n\nYou can propose a new feature creating an [issue](https://github.com/HenestrosaDev/mobile-strings-converter/new/choose).\n\n\u003c!-- CONTRIBUTING --\u003e\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\nPlease, read the [CONTRIBUTING.md](https://github.com/HenestrosaDev/mobile-strings-converter/blob/main/.github/CONTRIBUTING.md) file, where you can find more detailed information about how to contribute to the project.\n\n\u003c!-- LICENSE --\u003e\n\n## License\n\nDistributed under the MIT License. See [`LICENSE`](https://github.com/HenestrosaDev/mobile-strings-converter/blob/main/LICENSE) for more information.\n\n\u003c!-- AUTHORS --\u003e\n\n## Authors\n\n- HenestrosaDev \u003chenestrosadev@gmail.com\u003e (José Carlos López Henestrosa)\n\nSee also the list of [contributors](https://github.com/HenestrosaDev/mobile-strings-converter/contributors) who participated in this project.\n\n\u003c!-- ACKNOWLEDGMENTS --\u003e\n\n## Acknowledgments\n\nI have made use of the following resources to make this project:\n\n- [How to create a Python package](https://mathspp.com/blog/how-to-create-a-python-package-in-2022#how-to-create-a-python-package)\n\n\u003c!-- SUPPORT --\u003e\n\n## Support\n\nWould you like to support the project? That's very kind of you! You can go to my Ko-Fi profile by clicking on the button down below.\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/henestrosadev)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenestrosadev%2Fmobile-strings-converter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhenestrosadev%2Fmobile-strings-converter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenestrosadev%2Fmobile-strings-converter/lists"}