Skip to content

Commit 6e541df

Browse files
Merge pull request #58 from pescheckit/feature_made-language-not-required
Make --lang parameter optional with auto-detection from PO files
2 parents 364d42c + 85bb369 commit 6e541df

File tree

5 files changed

+43
-44
lines changed

5 files changed

+43
-44
lines changed

README.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ pip install gpt-po-translator
1515
# Set API key
1616
export OPENAI_API_KEY='your_api_key_here'
1717

18-
# Translate to German and French
19-
gpt-po-translator --folder ./locales --lang de,fr --bulk
18+
# Auto-detect and translate all languages
19+
gpt-po-translator --folder ./locales --bulk
2020
```
2121

2222
## ✨ Key Features
@@ -73,26 +73,26 @@ export AZURE_OPENAI_API_VERSION='2024-02-01'
7373

7474
### Basic Translation
7575
```bash
76-
# Translate to German (default: shows warnings/errors only)
77-
gpt-po-translator --folder ./locales --lang de
76+
# Auto-detect languages from PO files (recommended)
77+
gpt-po-translator --folder ./locales --bulk -v
7878

79-
# With progress information
80-
gpt-po-translator --folder ./locales --lang de -v
79+
# Or specify languages explicitly
80+
gpt-po-translator --folder ./locales --lang de,fr,es --bulk -v
8181

82-
# Multiple languages with verbose output
83-
gpt-po-translator --folder ./locales --lang de,fr,es -v --bulk
82+
# Single language with progress information
83+
gpt-po-translator --folder ./locales --lang de -v
8484
```
8585

8686
### Different AI Providers
8787
```bash
88-
# Use Claude (Anthropic)
89-
gpt-po-translator --provider anthropic --folder ./locales --lang de
88+
# Use Claude (Anthropic) - auto-detect languages
89+
gpt-po-translator --provider anthropic --folder ./locales --bulk
9090

91-
# Use DeepSeek
91+
# Use DeepSeek with specific languages
9292
gpt-po-translator --provider deepseek --folder ./locales --lang de
9393

94-
# Use Azure OpenAI
95-
gpt-po-translator --provider azure_openai --folder ./locales --lang de
94+
# Use Azure OpenAI with auto-detection
95+
gpt-po-translator --provider azure_openai --folder ./locales --bulk
9696
```
9797

9898
### Docker Usage
@@ -101,7 +101,7 @@ gpt-po-translator --provider azure_openai --folder ./locales --lang de
101101
docker run -v $(pwd):/data \
102102
-e OPENAI_API_KEY="your_key" \
103103
ghcr.io/pescheckit/python-gpt-po:latest \
104-
--folder /data --lang de,fr --bulk
104+
--folder /data --bulk
105105

106106
# With Azure OpenAI
107107
docker run -v $(pwd):/data \

docs/usage.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,12 @@ Below is a detailed explanation of all command-line arguments:
103103
*Description:* Specifies the input folder containing one or more `.po` files to be processed.
104104
*Behind the scenes:* The tool recursively scans this folder and processes every file ending with `.po`.
105105

106-
- **`--lang <language_codes>`**
107-
*Description:* A comma-separated list of ISO 639-1 language codes (e.g., `de,fr`) or locale codes (e.g., `fr_CA,pt_BR`).
108-
*Behind the scenes:* The tool filters PO files by comparing these codes with the file metadata and folder names (if `--folder-language` is enabled).
109-
110106
### Optional Options
111107

108+
- **`--lang <language_codes>`** *(Optional)*
109+
*Description:* A comma-separated list of ISO 639-1 language codes (e.g., `de,fr`) or locale codes (e.g., `fr_CA,pt_BR`). **If not provided, the tool will auto-detect languages from PO file metadata or folder structure.**
110+
*Behind the scenes:* The tool filters PO files by comparing these codes with the file metadata and folder names (if `--folder-language` is enabled). When omitted, it scans all PO files to extract language information automatically.
111+
112112
- **`--detail-lang <language_names>`**
113113
*Description:* A comma-separated list of full language names (e.g., `"German,French"`) that correspond to the codes provided with `--lang`.
114114
*Behind the scenes:* These names are used in the translation prompts to give the AI clearer context, potentially improving translation quality.

python_gpt_po/main.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from .services.model_manager import ModelManager
2020
from .services.translation_service import TranslationService
2121
from .utils.cli import (auto_select_provider, create_language_mapping, get_provider_from_args, parse_args,
22-
parse_languages, show_help_and_exit, validate_provider_key)
22+
show_help_and_exit, validate_provider_key)
2323

2424

2525
def setup_logging(verbose: int = 0, quiet: bool = False):
@@ -195,18 +195,13 @@ def main():
195195

196196
# Get languages - either from args or auto-detect from PO files
197197
try:
198-
if args.lang:
199-
languages = parse_languages(args.lang)
200-
logging.info("Using specified languages: %s", ', '.join(languages))
201-
else:
202-
respect_gitignore = not args.no_gitignore # Invert the flag
203-
languages = LanguageDetector.detect_languages_from_folder(
204-
args.folder,
205-
use_folder_structure=args.folder_language,
206-
respect_gitignore=respect_gitignore
207-
)
208-
detection_method = "folder structure" if args.folder_language else "metadata"
209-
logging.info("Auto-detected languages from %s: %s", detection_method, ', '.join(languages))
198+
respect_gitignore = not args.no_gitignore # Invert the flag
199+
languages = LanguageDetector.validate_or_detect_languages(
200+
folder=args.folder,
201+
lang_arg=args.lang,
202+
use_folder_structure=args.folder_language,
203+
respect_gitignore=respect_gitignore
204+
)
210205
except ValueError as e:
211206
logging.error(str(e))
212207
sys.exit(1)

python_gpt_po/utils/cli.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,17 @@ def parse_args() -> Namespace:
4646
description="Translate .po files using AI language models",
4747
epilog="""
4848
Examples:
49-
# Basic usage with OpenAI
49+
# Auto-detect languages from PO files (recommended)
50+
gpt-po-translator --folder ./locales --bulk
51+
52+
# Specify languages explicitly
5053
gpt-po-translator --folder ./locales --lang fr,es,de
5154
5255
# Use Anthropic with detailed language names
5356
gpt-po-translator --folder ./i18n --lang nl,de --detail-lang "Dutch,German" --provider anthropic
5457
5558
# List available models for a provider (no need for --folder or --lang)
5659
gpt-po-translator --provider deepseek --list-models
57-
58-
# Process multiple translations in bulk with a specific model
59-
gpt-po-translator --folder ./locales --lang ja,ko --bulk --model gpt-4
6060
""",
6161
formatter_class=lambda prog: RawDescriptionHelpFormatter(prog, max_help_position=35, width=100)
6262
)
@@ -76,15 +76,14 @@ def parse_args() -> Namespace:
7676
metavar="FOLDER",
7777
help="Input folder containing .po files"
7878
)
79-
required_group.add_argument(
79+
80+
# Language options
81+
language_group.add_argument(
8082
"-l", "--lang",
81-
required=False, # Now optional - will auto-detect from PO files if not provided
8283
metavar="LANG",
8384
help=("Comma-separated language codes to translate (e.g., fr,es,de or locale codes like fr_CA,pt_BR,en-US). "
8485
"If not provided, will auto-detect from PO files")
8586
)
86-
87-
# Language options
8887
language_group.add_argument(
8988
"--detail-lang",
9089
metavar="NAMES",

python_gpt_po/utils/helpers.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
Helper utilities for the PO translator application.
33
"""
44

5-
from pkg_resources import DistributionNotFound, get_distribution
6-
75
# Import version with fallback to avoid circular imports
86
try:
97
from .. import __version__
@@ -21,8 +19,15 @@ def get_version():
2119
# First check if version is available from the top-level import
2220
if __version__ is not None:
2321
return __version__
24-
# Fall back to package metadata
22+
23+
# Fall back to modern package metadata approach
2524
try:
26-
return get_distribution("gpt-po-translator").version
27-
except DistributionNotFound:
25+
# Use importlib.metadata (Python 3.8+) or importlib_metadata (fallback)
26+
try:
27+
from importlib.metadata import version
28+
except ImportError:
29+
from importlib_metadata import version
30+
return version("gpt-po-translator")
31+
except Exception:
32+
# Final fallback if all else fails
2833
return "0.0.0"

0 commit comments

Comments
 (0)