Skip to main content

Extract fluent keys from python code and organize them in .ftl files

Project description

FTL-Extract

Description

FTL-Extract is a Python package that extracts Fluent keys from .py files and generates .ftl file with extracted keys.


🔥 Try fast-ftl-extract command.

It's Rust version of ftl extract command, that is 10-20 times faster than Python version.


Installation

Use the package manager pip to install FTL-Extract.

$ pip install FTL-Extract

Or use modern tool like UV to install FTL-Extract.

$ uv add --dev FTL-Extract

Usage

First of all, you should create locales directory in your project.

$ mkdir project_path/locales

Then, you can use the following command to extract keys from your code.

$ ftl extract project_path/code_path project_path/locales

By default, FTL-Extract will create a directory named en and put all keys into _default.ftl file.

In some cases, you may want to extract keys to specific .ftl files. So, there is new keyword argument _path in i18n.get and i18n.<key>.

# Before
i18n.get("key-1", arg1="value1", arg2="value2")

# After
i18n.get("key-1", arg1="value1", arg2="value2", _path="dir/ftl_file.ftl")

# Also
i18n.key_1(arg1="value1", arg2="value2", _path="dir/ftl_file.ftl")

# Or
i18n.some.key_1(arg1="value1", arg2="value2", _path="dir/ftl_file.ftl")

💁‍♂️ Explanation of the ftl extract command

$ ftl extract project_path/code_path project_path/locales
  • project_path/code_path - path to the project directory where the code is located.
  • project_path/locales - path to the project directory where the .ftl files will be located.

📚 Additional arguments

  • -l or --language - add a new language to the project.
  • -k or --i18n-keys - add additional i18n keys to the extractor.
  • -K or --i18n-keys-append - add additional i18n keys to the extractor and append them to the default list.
  • -p or --i18n-keys-prefix - add a prefix to the i18n keys. For example, self.i18n.<key>().
  • -e or --exclude-dirs - exclude specific directories from the extraction process.
  • -E or --exclude-dirs-append - add more directories to exclude from the extraction process.
  • -i or --ignore-attributes - ignore specific attributes of the i18n.* like i18n.set_locale.
  • -I or --append-ignore-attributes - add more attributes to ignore to the default list.
  • --ignore-kwargs - ignore specific kwargs of the i18n_keys like when=... in aiogram_dialog.I18nFormat(..., when=...).
  • --comment-junks - comments errored translations in the .ftl file.
  • --default-ftl-file - specify the default .ftl file name.
  • --comment-keys-mode - specify the comment keys mode. It will comment keys that are not used in the code or print warnings about them. Available modes: comment, warn.
  • -v or --verbose - print additional information about the process.
  • --dry-run - run the command without making any changes to the files.

💁‍♂️ Explanation of the ftl stub command

$ ftl stub 'project_path/locales/<locale>' 'project_path/code_path'
  • project_path/locales/<locale> - path to the locales directory where the <locale> directory (e.g. en) contains .ftl files located.
  • project_path/code_path - path to the directory where the stub.pyi will be located.

FAQ

❓ - How to add more languages to the project ?

# Here we add 3 languages: English, Ukrainian and Polish
$ ftl extract project_path/code_path project_path/locales -l en -l uk -l pl

❓ - How to detect another i18n keys like LazyProxy or L ?

# Here we extract ftl keys from i18n-keys like `LF`, `LazyProxy` and `L`
$ ftl extract project_path/code_path project_path/locales -K LF -K LazyProxy -K L

How I use FTL-Extract in most of my projects

$ fast-ftl-extract \
  'app/bot' \
  'app/bot/locales' \
  -l 'en' \
  -l 'uk' \
  -K 'LF' \
  -I 'core' \
  -E './tests/*' \
  --ignore-kwargs 'when' \
  --comment-junks \
  --comment-keys-mode 'comment' \
  --verbose

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ftl_extract-0.10.0a1.tar.gz (36.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ftl_extract-0.10.0a1-py3-none-win_amd64.whl (1.9 MB view details)

Uploaded Python 3Windows x86-64

ftl_extract-0.10.0a1-py3-none-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ftl_extract-0.10.0a1-py3-none-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ftl_extract-0.10.0a1-py3-none-manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

ftl_extract-0.10.0a1-py3-none-manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

ftl_extract-0.10.0a1-py3-none-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file ftl_extract-0.10.0a1.tar.gz.

File metadata

  • Download URL: ftl_extract-0.10.0a1.tar.gz
  • Upload date:
  • Size: 36.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ftl_extract-0.10.0a1.tar.gz
Algorithm Hash digest
SHA256 2738e78bd44b6a87b20c95c261cdd07316eb06800fa132f00172ab242e72f3e8
MD5 08a1c8764a5b335a5299efaad2ec8a9f
BLAKE2b-256 c110188280988ff5b96e631605bbdda5d5f778d3cf3ba35f467d2bfbe9768ab4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a1.tar.gz:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.10.0a1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 d6ad4ac1a31b3b78d12c52969019657ba7e7765924947c702cbccf6ec8e6446b
MD5 e00fb74dd0dab06d3d4e531561560f20
BLAKE2b-256 c8225d6857b1a37e85861cd676aa17de1c7c8a56b02f22ebe8de9403d7183dbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a1-py3-none-win_amd64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.10.0a1-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ab541026aedf33739dc9190879f402cf1b9890e6e2bf7ba514a7c6f0e744e988
MD5 fe1b1a0cf7fe31471fdf6a69b43fb98d
BLAKE2b-256 988cb34de499c327c9ee88794e578ea2c7d7fef2d8b2a601d38ddacf3db3c03e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a1-py3-none-musllinux_1_2_x86_64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.10.0a1-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7ccadf601cbc5de7851601f9e0686b15d9b6c8557738c3a7990855a38cc3a7a0
MD5 bd1d2c0b4eebbba976f0c86d46a801ba
BLAKE2b-256 5b615f53791d45f9e83d493547dc442e9e84ee70f750dc743731432f0de218af

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a1-py3-none-musllinux_1_2_aarch64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.10.0a1-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 859bded36aa3fadcc505d7f20bf8cf730a2afbc93727fb66563678342ee1f8c9
MD5 ac6c16c71a178dd7ac4e4783c4b45926
BLAKE2b-256 078f71eb5f9b0d8041de8f665723d5ba895fba519ce80a3dc407a812912ffaf9

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a1-py3-none-manylinux_2_28_x86_64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.10.0a1-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 be2687b7759dfd389c4e39ca4ee490d02d63f806ac2b329460678c34482e596e
MD5 9be02b46510544ab207e4a5e104c3b69
BLAKE2b-256 4784905554e35646a06a3558e3aed288489238509b9beec26444302741f19bef

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a1-py3-none-manylinux_2_28_aarch64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.10.0a1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4f50ad4c976473930e01926e9da3c23368ea37e5d038cfeda68251648bf1a13b
MD5 5f8b8ac7a30369245d0a207e1affd322
BLAKE2b-256 6afdb8d98177142df23ab29817bfeb57d9cfec5a584fd39ad97d47bae4468992

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a1-py3-none-macosx_11_0_arm64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page