Skip to content

Commit 3a59302

Browse files
committed
fix(cli): skip tolgee sync for unmapped catalogs
1 parent b8a4ba6 commit 3a59302

2 files changed

Lines changed: 63 additions & 11 deletions

File tree

langcodec-cli/src/tolgee.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,15 @@ pub fn prefill_translate_from_tolgee(
197197
}
198198

199199
let project = load_tolgee_project(settings.config.as_deref())?;
200-
let mapping = resolve_mapping_for_catalog(&project, local_catalog_path)?;
200+
let Some(mapping) = find_mapping_for_catalog(&project, local_catalog_path)? else {
201+
if settings.namespaces.is_empty() {
202+
return Ok(None);
203+
}
204+
return Err(format!(
205+
"Catalog '{}' is not configured in Tolgee push.files",
206+
local_catalog_path
207+
));
208+
};
201209

202210
if !settings.namespaces.is_empty()
203211
&& !settings
@@ -523,22 +531,16 @@ fn select_mappings(
523531
Ok(selected)
524532
}
525533

526-
fn resolve_mapping_for_catalog(
534+
fn find_mapping_for_catalog(
527535
project: &TolgeeProject,
528536
local_catalog_path: &str,
529-
) -> Result<TolgeeMappedFile, String> {
537+
) -> Result<Option<TolgeeMappedFile>, String> {
530538
let resolved = absolute_from_current_dir(local_catalog_path)?;
531-
project
539+
Ok(project
532540
.mappings
533541
.iter()
534542
.find(|mapping| mapping.absolute_path == resolved)
535-
.cloned()
536-
.ok_or_else(|| {
537-
format!(
538-
"Catalog '{}' is not configured in Tolgee push.files",
539-
local_catalog_path
540-
)
541-
})
543+
.cloned())
542544
}
543545

544546
fn discover_tolgee_cli(project_root: &Path) -> Result<TolgeeCliInvocation, String> {

langcodec-cli/src/translate.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2772,6 +2772,56 @@ target = "translated.xcstrings"
27722772
assert!(captured.contains("\"Core\""));
27732773
}
27742774

2775+
#[test]
2776+
fn tolgee_translate_ignores_unmapped_catalogs_without_namespace_filter() {
2777+
let temp_dir = TempDir::new().unwrap();
2778+
let project_root = temp_dir.path();
2779+
let source = project_root.join("ModuleExport.xcstrings");
2780+
2781+
fs::write(
2782+
&source,
2783+
r#"{
2784+
"sourceLanguage" : "en",
2785+
"version" : "1.0",
2786+
"strings" : {
2787+
"welcome" : {
2788+
"localizations" : {
2789+
"en" : {
2790+
"stringUnit" : {
2791+
"state" : "translated",
2792+
"value" : "Welcome"
2793+
}
2794+
},
2795+
"fr" : {
2796+
"stringUnit" : {
2797+
"state" : "translated",
2798+
"value" : "Bienvenue"
2799+
}
2800+
}
2801+
}
2802+
}
2803+
}
2804+
}"#,
2805+
)
2806+
.unwrap();
2807+
2808+
let tolgee_config = write_translate_tolgee_config(project_root);
2809+
let mut options = base_options(&source, None);
2810+
options.target_langs = vec!["fr".to_string()];
2811+
options.provider = None;
2812+
options.model = None;
2813+
options.use_tolgee = true;
2814+
options.tolgee_config = Some(tolgee_config.to_string_lossy().to_string());
2815+
2816+
let prepared = prepare_translation(&options).unwrap();
2817+
assert!(prepared.tolgee_context.is_none());
2818+
assert!(prepared.jobs.is_empty());
2819+
2820+
let outcome = run_prepared_translation(prepared, None).unwrap();
2821+
assert_eq!(outcome.translated, 0);
2822+
assert_eq!(outcome.failed, 0);
2823+
}
2824+
27752825
#[test]
27762826
fn falls_back_to_xcstrings_key_when_source_locale_entry_is_missing() {
27772827
let temp_dir = TempDir::new().unwrap();

0 commit comments

Comments
 (0)