setiastrosuitepro 1.6.2.post1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of setiastrosuitepro might be problematic. Click here for more details.
- setiastro/__init__.py +2 -0
- setiastro/data/SASP_data.fits +0 -0
- setiastro/data/catalogs/List_of_Galaxies_with_Distances_Gly.csv +488 -0
- setiastro/data/catalogs/astrobin_filters.csv +890 -0
- setiastro/data/catalogs/astrobin_filters_page1_local.csv +51 -0
- setiastro/data/catalogs/cali2.csv +63 -0
- setiastro/data/catalogs/cali2color.csv +65 -0
- setiastro/data/catalogs/celestial_catalog - original.csv +16471 -0
- setiastro/data/catalogs/celestial_catalog.csv +24031 -0
- setiastro/data/catalogs/detected_stars.csv +24784 -0
- setiastro/data/catalogs/fits_header_data.csv +46 -0
- setiastro/data/catalogs/test.csv +8 -0
- setiastro/data/catalogs/updated_celestial_catalog.csv +16471 -0
- setiastro/images/Astro_Spikes.png +0 -0
- setiastro/images/Background_startup.jpg +0 -0
- setiastro/images/HRDiagram.png +0 -0
- setiastro/images/LExtract.png +0 -0
- setiastro/images/LInsert.png +0 -0
- setiastro/images/Oxygenation-atm-2.svg.png +0 -0
- setiastro/images/RGB080604.png +0 -0
- setiastro/images/abeicon.png +0 -0
- setiastro/images/aberration.png +0 -0
- setiastro/images/andromedatry.png +0 -0
- setiastro/images/andromedatry_satellited.png +0 -0
- setiastro/images/annotated.png +0 -0
- setiastro/images/aperture.png +0 -0
- setiastro/images/astrosuite.ico +0 -0
- setiastro/images/astrosuite.png +0 -0
- setiastro/images/astrosuitepro.icns +0 -0
- setiastro/images/astrosuitepro.ico +0 -0
- setiastro/images/astrosuitepro.png +0 -0
- setiastro/images/background.png +0 -0
- setiastro/images/background2.png +0 -0
- setiastro/images/benchmark.png +0 -0
- setiastro/images/big_moon_stabilizer_timeline.png +0 -0
- setiastro/images/big_moon_stabilizer_timeline_clean.png +0 -0
- setiastro/images/blaster.png +0 -0
- setiastro/images/blink.png +0 -0
- setiastro/images/clahe.png +0 -0
- setiastro/images/collage.png +0 -0
- setiastro/images/colorwheel.png +0 -0
- setiastro/images/contsub.png +0 -0
- setiastro/images/convo.png +0 -0
- setiastro/images/copyslot.png +0 -0
- setiastro/images/cosmic.png +0 -0
- setiastro/images/cosmicsat.png +0 -0
- setiastro/images/crop1.png +0 -0
- setiastro/images/cropicon.png +0 -0
- setiastro/images/curves.png +0 -0
- setiastro/images/cvs.png +0 -0
- setiastro/images/debayer.png +0 -0
- setiastro/images/denoise_cnn_custom.png +0 -0
- setiastro/images/denoise_cnn_graph.png +0 -0
- setiastro/images/disk.png +0 -0
- setiastro/images/dse.png +0 -0
- setiastro/images/exoicon.png +0 -0
- setiastro/images/eye.png +0 -0
- setiastro/images/fliphorizontal.png +0 -0
- setiastro/images/flipvertical.png +0 -0
- setiastro/images/font.png +0 -0
- setiastro/images/freqsep.png +0 -0
- setiastro/images/functionbundle.png +0 -0
- setiastro/images/graxpert.png +0 -0
- setiastro/images/green.png +0 -0
- setiastro/images/gridicon.png +0 -0
- setiastro/images/halo.png +0 -0
- setiastro/images/hdr.png +0 -0
- setiastro/images/histogram.png +0 -0
- setiastro/images/hubble.png +0 -0
- setiastro/images/imagecombine.png +0 -0
- setiastro/images/invert.png +0 -0
- setiastro/images/isophote.png +0 -0
- setiastro/images/isophote_demo_figure.png +0 -0
- setiastro/images/isophote_demo_image.png +0 -0
- setiastro/images/isophote_demo_model.png +0 -0
- setiastro/images/isophote_demo_residual.png +0 -0
- setiastro/images/jwstpupil.png +0 -0
- setiastro/images/linearfit.png +0 -0
- setiastro/images/livestacking.png +0 -0
- setiastro/images/mask.png +0 -0
- setiastro/images/maskapply.png +0 -0
- setiastro/images/maskcreate.png +0 -0
- setiastro/images/maskremove.png +0 -0
- setiastro/images/morpho.png +0 -0
- setiastro/images/mosaic.png +0 -0
- setiastro/images/multiscale_decomp.png +0 -0
- setiastro/images/nbtorgb.png +0 -0
- setiastro/images/neutral.png +0 -0
- setiastro/images/nuke.png +0 -0
- setiastro/images/openfile.png +0 -0
- setiastro/images/pedestal.png +0 -0
- setiastro/images/pen.png +0 -0
- setiastro/images/pixelmath.png +0 -0
- setiastro/images/platesolve.png +0 -0
- setiastro/images/ppp.png +0 -0
- setiastro/images/pro.png +0 -0
- setiastro/images/project.png +0 -0
- setiastro/images/psf.png +0 -0
- setiastro/images/redo.png +0 -0
- setiastro/images/redoicon.png +0 -0
- setiastro/images/rescale.png +0 -0
- setiastro/images/rgbalign.png +0 -0
- setiastro/images/rgbcombo.png +0 -0
- setiastro/images/rgbextract.png +0 -0
- setiastro/images/rotate180.png +0 -0
- setiastro/images/rotateclockwise.png +0 -0
- setiastro/images/rotatecounterclockwise.png +0 -0
- setiastro/images/satellite.png +0 -0
- setiastro/images/script.png +0 -0
- setiastro/images/selectivecolor.png +0 -0
- setiastro/images/simbad.png +0 -0
- setiastro/images/slot0.png +0 -0
- setiastro/images/slot1.png +0 -0
- setiastro/images/slot2.png +0 -0
- setiastro/images/slot3.png +0 -0
- setiastro/images/slot4.png +0 -0
- setiastro/images/slot5.png +0 -0
- setiastro/images/slot6.png +0 -0
- setiastro/images/slot7.png +0 -0
- setiastro/images/slot8.png +0 -0
- setiastro/images/slot9.png +0 -0
- setiastro/images/spcc.png +0 -0
- setiastro/images/spin_precession_vs_lunar_distance.png +0 -0
- setiastro/images/spinner.gif +0 -0
- setiastro/images/stacking.png +0 -0
- setiastro/images/staradd.png +0 -0
- setiastro/images/staralign.png +0 -0
- setiastro/images/starnet.png +0 -0
- setiastro/images/starregistration.png +0 -0
- setiastro/images/starspike.png +0 -0
- setiastro/images/starstretch.png +0 -0
- setiastro/images/statstretch.png +0 -0
- setiastro/images/supernova.png +0 -0
- setiastro/images/uhs.png +0 -0
- setiastro/images/undoicon.png +0 -0
- setiastro/images/upscale.png +0 -0
- setiastro/images/viewbundle.png +0 -0
- setiastro/images/whitebalance.png +0 -0
- setiastro/images/wimi_icon_256x256.png +0 -0
- setiastro/images/wimilogo.png +0 -0
- setiastro/images/wims.png +0 -0
- setiastro/images/wrench_icon.png +0 -0
- setiastro/images/xisfliberator.png +0 -0
- setiastro/qml/ResourceMonitor.qml +126 -0
- setiastro/saspro/__init__.py +20 -0
- setiastro/saspro/__main__.py +945 -0
- setiastro/saspro/_generated/__init__.py +7 -0
- setiastro/saspro/_generated/build_info.py +3 -0
- setiastro/saspro/abe.py +1346 -0
- setiastro/saspro/abe_preset.py +196 -0
- setiastro/saspro/aberration_ai.py +694 -0
- setiastro/saspro/aberration_ai_preset.py +224 -0
- setiastro/saspro/accel_installer.py +218 -0
- setiastro/saspro/accel_workers.py +30 -0
- setiastro/saspro/add_stars.py +624 -0
- setiastro/saspro/astrobin_exporter.py +1010 -0
- setiastro/saspro/astrospike.py +153 -0
- setiastro/saspro/astrospike_python.py +1841 -0
- setiastro/saspro/autostretch.py +198 -0
- setiastro/saspro/backgroundneutral.py +602 -0
- setiastro/saspro/batch_convert.py +328 -0
- setiastro/saspro/batch_renamer.py +522 -0
- setiastro/saspro/blemish_blaster.py +491 -0
- setiastro/saspro/blink_comparator_pro.py +2926 -0
- setiastro/saspro/bundles.py +61 -0
- setiastro/saspro/bundles_dock.py +114 -0
- setiastro/saspro/cheat_sheet.py +213 -0
- setiastro/saspro/clahe.py +368 -0
- setiastro/saspro/comet_stacking.py +1442 -0
- setiastro/saspro/common_tr.py +107 -0
- setiastro/saspro/config.py +38 -0
- setiastro/saspro/config_bootstrap.py +40 -0
- setiastro/saspro/config_manager.py +316 -0
- setiastro/saspro/continuum_subtract.py +1617 -0
- setiastro/saspro/convo.py +1400 -0
- setiastro/saspro/convo_preset.py +414 -0
- setiastro/saspro/copyastro.py +190 -0
- setiastro/saspro/cosmicclarity.py +1589 -0
- setiastro/saspro/cosmicclarity_preset.py +407 -0
- setiastro/saspro/crop_dialog_pro.py +973 -0
- setiastro/saspro/crop_preset.py +189 -0
- setiastro/saspro/curve_editor_pro.py +2562 -0
- setiastro/saspro/curves_preset.py +375 -0
- setiastro/saspro/debayer.py +673 -0
- setiastro/saspro/debug_utils.py +29 -0
- setiastro/saspro/dnd_mime.py +35 -0
- setiastro/saspro/doc_manager.py +2664 -0
- setiastro/saspro/exoplanet_detector.py +2166 -0
- setiastro/saspro/file_utils.py +284 -0
- setiastro/saspro/fitsmodifier.py +748 -0
- setiastro/saspro/fix_bom.py +32 -0
- setiastro/saspro/free_torch_memory.py +48 -0
- setiastro/saspro/frequency_separation.py +1349 -0
- setiastro/saspro/function_bundle.py +1596 -0
- setiastro/saspro/generate_translations.py +3092 -0
- setiastro/saspro/ghs_dialog_pro.py +663 -0
- setiastro/saspro/ghs_preset.py +284 -0
- setiastro/saspro/graxpert.py +637 -0
- setiastro/saspro/graxpert_preset.py +287 -0
- setiastro/saspro/gui/__init__.py +0 -0
- setiastro/saspro/gui/main_window.py +8810 -0
- setiastro/saspro/gui/mixins/__init__.py +33 -0
- setiastro/saspro/gui/mixins/dock_mixin.py +362 -0
- setiastro/saspro/gui/mixins/file_mixin.py +450 -0
- setiastro/saspro/gui/mixins/geometry_mixin.py +403 -0
- setiastro/saspro/gui/mixins/header_mixin.py +441 -0
- setiastro/saspro/gui/mixins/mask_mixin.py +421 -0
- setiastro/saspro/gui/mixins/menu_mixin.py +389 -0
- setiastro/saspro/gui/mixins/theme_mixin.py +367 -0
- setiastro/saspro/gui/mixins/toolbar_mixin.py +1457 -0
- setiastro/saspro/gui/mixins/update_mixin.py +309 -0
- setiastro/saspro/gui/mixins/view_mixin.py +435 -0
- setiastro/saspro/gui/statistics_dialog.py +47 -0
- setiastro/saspro/halobgon.py +488 -0
- setiastro/saspro/header_viewer.py +448 -0
- setiastro/saspro/headless_utils.py +88 -0
- setiastro/saspro/histogram.py +756 -0
- setiastro/saspro/history_explorer.py +941 -0
- setiastro/saspro/i18n.py +168 -0
- setiastro/saspro/image_combine.py +417 -0
- setiastro/saspro/image_peeker_pro.py +1604 -0
- setiastro/saspro/imageops/__init__.py +37 -0
- setiastro/saspro/imageops/mdi_snap.py +292 -0
- setiastro/saspro/imageops/scnr.py +36 -0
- setiastro/saspro/imageops/starbasedwhitebalance.py +210 -0
- setiastro/saspro/imageops/stretch.py +236 -0
- setiastro/saspro/isophote.py +1182 -0
- setiastro/saspro/layers.py +208 -0
- setiastro/saspro/layers_dock.py +714 -0
- setiastro/saspro/lazy_imports.py +193 -0
- setiastro/saspro/legacy/__init__.py +2 -0
- setiastro/saspro/legacy/image_manager.py +2226 -0
- setiastro/saspro/legacy/numba_utils.py +3676 -0
- setiastro/saspro/legacy/xisf.py +1071 -0
- setiastro/saspro/linear_fit.py +537 -0
- setiastro/saspro/live_stacking.py +1841 -0
- setiastro/saspro/log_bus.py +5 -0
- setiastro/saspro/logging_config.py +460 -0
- setiastro/saspro/luminancerecombine.py +309 -0
- setiastro/saspro/main_helpers.py +201 -0
- setiastro/saspro/mask_creation.py +931 -0
- setiastro/saspro/masks_core.py +56 -0
- setiastro/saspro/mdi_widgets.py +353 -0
- setiastro/saspro/memory_utils.py +666 -0
- setiastro/saspro/metadata_patcher.py +75 -0
- setiastro/saspro/mfdeconv.py +3831 -0
- setiastro/saspro/mfdeconv_earlystop.py +71 -0
- setiastro/saspro/mfdeconvcudnn.py +3263 -0
- setiastro/saspro/mfdeconvsport.py +2382 -0
- setiastro/saspro/minorbodycatalog.py +567 -0
- setiastro/saspro/morphology.py +407 -0
- setiastro/saspro/multiscale_decomp.py +1293 -0
- setiastro/saspro/nbtorgb_stars.py +541 -0
- setiastro/saspro/numba_utils.py +3145 -0
- setiastro/saspro/numba_warmup.py +141 -0
- setiastro/saspro/ops/__init__.py +9 -0
- setiastro/saspro/ops/command_help_dialog.py +623 -0
- setiastro/saspro/ops/command_runner.py +217 -0
- setiastro/saspro/ops/commands.py +1594 -0
- setiastro/saspro/ops/script_editor.py +1102 -0
- setiastro/saspro/ops/scripts.py +1473 -0
- setiastro/saspro/ops/settings.py +637 -0
- setiastro/saspro/parallel_utils.py +554 -0
- setiastro/saspro/pedestal.py +121 -0
- setiastro/saspro/perfect_palette_picker.py +1071 -0
- setiastro/saspro/pipeline.py +110 -0
- setiastro/saspro/pixelmath.py +1604 -0
- setiastro/saspro/plate_solver.py +2445 -0
- setiastro/saspro/project_io.py +797 -0
- setiastro/saspro/psf_utils.py +136 -0
- setiastro/saspro/psf_viewer.py +549 -0
- setiastro/saspro/pyi_rthook_astroquery.py +95 -0
- setiastro/saspro/remove_green.py +331 -0
- setiastro/saspro/remove_stars.py +1599 -0
- setiastro/saspro/remove_stars_preset.py +404 -0
- setiastro/saspro/resources.py +501 -0
- setiastro/saspro/rgb_combination.py +208 -0
- setiastro/saspro/rgb_extract.py +19 -0
- setiastro/saspro/rgbalign.py +723 -0
- setiastro/saspro/runtime_imports.py +7 -0
- setiastro/saspro/runtime_torch.py +754 -0
- setiastro/saspro/save_options.py +73 -0
- setiastro/saspro/selective_color.py +1552 -0
- setiastro/saspro/sfcc.py +1472 -0
- setiastro/saspro/shortcuts.py +3043 -0
- setiastro/saspro/signature_insert.py +1102 -0
- setiastro/saspro/stacking_suite.py +18470 -0
- setiastro/saspro/star_alignment.py +7435 -0
- setiastro/saspro/star_alignment_preset.py +329 -0
- setiastro/saspro/star_metrics.py +49 -0
- setiastro/saspro/star_spikes.py +765 -0
- setiastro/saspro/star_stretch.py +507 -0
- setiastro/saspro/stat_stretch.py +538 -0
- setiastro/saspro/status_log_dock.py +78 -0
- setiastro/saspro/subwindow.py +3328 -0
- setiastro/saspro/supernovaasteroidhunter.py +1719 -0
- setiastro/saspro/swap_manager.py +99 -0
- setiastro/saspro/torch_backend.py +89 -0
- setiastro/saspro/torch_rejection.py +434 -0
- setiastro/saspro/translations/all_source_strings.json +3654 -0
- setiastro/saspro/translations/ar_translations.py +3865 -0
- setiastro/saspro/translations/de_translations.py +3749 -0
- setiastro/saspro/translations/es_translations.py +3939 -0
- setiastro/saspro/translations/fr_translations.py +3858 -0
- setiastro/saspro/translations/hi_translations.py +3571 -0
- setiastro/saspro/translations/integrate_translations.py +270 -0
- setiastro/saspro/translations/it_translations.py +3678 -0
- setiastro/saspro/translations/ja_translations.py +3601 -0
- setiastro/saspro/translations/pt_translations.py +3869 -0
- setiastro/saspro/translations/ru_translations.py +2848 -0
- setiastro/saspro/translations/saspro_ar.qm +0 -0
- setiastro/saspro/translations/saspro_ar.ts +255 -0
- setiastro/saspro/translations/saspro_de.qm +0 -0
- setiastro/saspro/translations/saspro_de.ts +253 -0
- setiastro/saspro/translations/saspro_es.qm +0 -0
- setiastro/saspro/translations/saspro_es.ts +12520 -0
- setiastro/saspro/translations/saspro_fr.qm +0 -0
- setiastro/saspro/translations/saspro_fr.ts +12514 -0
- setiastro/saspro/translations/saspro_hi.qm +0 -0
- setiastro/saspro/translations/saspro_hi.ts +257 -0
- setiastro/saspro/translations/saspro_it.qm +0 -0
- setiastro/saspro/translations/saspro_it.ts +12520 -0
- setiastro/saspro/translations/saspro_ja.qm +0 -0
- setiastro/saspro/translations/saspro_ja.ts +257 -0
- setiastro/saspro/translations/saspro_pt.qm +0 -0
- setiastro/saspro/translations/saspro_pt.ts +257 -0
- setiastro/saspro/translations/saspro_ru.qm +0 -0
- setiastro/saspro/translations/saspro_ru.ts +237 -0
- setiastro/saspro/translations/saspro_sw.qm +0 -0
- setiastro/saspro/translations/saspro_sw.ts +257 -0
- setiastro/saspro/translations/saspro_uk.qm +0 -0
- setiastro/saspro/translations/saspro_uk.ts +10771 -0
- setiastro/saspro/translations/saspro_zh.qm +0 -0
- setiastro/saspro/translations/saspro_zh.ts +12520 -0
- setiastro/saspro/translations/sw_translations.py +3671 -0
- setiastro/saspro/translations/uk_translations.py +3700 -0
- setiastro/saspro/translations/zh_translations.py +3675 -0
- setiastro/saspro/versioning.py +77 -0
- setiastro/saspro/view_bundle.py +1558 -0
- setiastro/saspro/wavescale_hdr.py +645 -0
- setiastro/saspro/wavescale_hdr_preset.py +101 -0
- setiastro/saspro/wavescalede.py +680 -0
- setiastro/saspro/wavescalede_preset.py +230 -0
- setiastro/saspro/wcs_update.py +374 -0
- setiastro/saspro/whitebalance.py +492 -0
- setiastro/saspro/widgets/__init__.py +48 -0
- setiastro/saspro/widgets/common_utilities.py +306 -0
- setiastro/saspro/widgets/graphics_views.py +122 -0
- setiastro/saspro/widgets/image_utils.py +518 -0
- setiastro/saspro/widgets/minigame/game.js +986 -0
- setiastro/saspro/widgets/minigame/index.html +53 -0
- setiastro/saspro/widgets/minigame/style.css +241 -0
- setiastro/saspro/widgets/preview_dialogs.py +280 -0
- setiastro/saspro/widgets/resource_monitor.py +237 -0
- setiastro/saspro/widgets/spinboxes.py +275 -0
- setiastro/saspro/widgets/themed_buttons.py +13 -0
- setiastro/saspro/widgets/wavelet_utils.py +331 -0
- setiastro/saspro/wimi.py +7996 -0
- setiastro/saspro/wims.py +578 -0
- setiastro/saspro/window_shelf.py +185 -0
- setiastro/saspro/xisf.py +1123 -0
- setiastrosuitepro-1.6.2.post1.dist-info/METADATA +278 -0
- setiastrosuitepro-1.6.2.post1.dist-info/RECORD +367 -0
- setiastrosuitepro-1.6.2.post1.dist-info/WHEEL +4 -0
- setiastrosuitepro-1.6.2.post1.dist-info/entry_points.txt +6 -0
- setiastrosuitepro-1.6.2.post1.dist-info/licenses/LICENSE +674 -0
- setiastrosuitepro-1.6.2.post1.dist-info/licenses/license.txt +2580 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Translation integration script for Seti Astro Suite Pro.
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
python integrate_translations.py
|
|
7
|
+
|
|
8
|
+
This will:
|
|
9
|
+
1. Load translations from it_translations.py, fr_translations.py, es_translations.py, zh_translations.py
|
|
10
|
+
2. Update the .ts files with translations
|
|
11
|
+
3. Compile .qm files using lrelease
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import os
|
|
15
|
+
import sys
|
|
16
|
+
import xml.etree.ElementTree as ET
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
# Get the translations directory
|
|
20
|
+
SCRIPT_DIR = Path(__file__).parent
|
|
21
|
+
|
|
22
|
+
# Import merged translation files
|
|
23
|
+
try:
|
|
24
|
+
from it_translations import TRANSLATIONS_IT
|
|
25
|
+
except ImportError:
|
|
26
|
+
print("Warning: Could not import Italian translations (it_translations.py)")
|
|
27
|
+
TRANSLATIONS_IT = {}
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
from fr_translations import TRANSLATIONS_FR
|
|
31
|
+
except ImportError:
|
|
32
|
+
print("Warning: Could not import French translations (fr_translations.py)")
|
|
33
|
+
TRANSLATIONS_FR = {}
|
|
34
|
+
|
|
35
|
+
try:
|
|
36
|
+
from es_translations import TRANSLATIONS_ES
|
|
37
|
+
except ImportError:
|
|
38
|
+
print("Warning: Could not import Spanish translations (es_translations.py)")
|
|
39
|
+
TRANSLATIONS_ES = {}
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
from zh_translations import TRANSLATIONS_ZH
|
|
43
|
+
except ImportError:
|
|
44
|
+
print("Warning: Could not import Chinese translations (zh_translations.py)")
|
|
45
|
+
TRANSLATIONS_ZH = {}
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
from de_translations import TRANSLATIONS_DE
|
|
49
|
+
except ImportError:
|
|
50
|
+
print("Warning: Could not import German translations (de_translations.py)")
|
|
51
|
+
TRANSLATIONS_DE = {}
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
from pt_translations import TRANSLATIONS_PT
|
|
55
|
+
except ImportError:
|
|
56
|
+
print("Warning: Could not import Portuguese translations (pt_translations.py)")
|
|
57
|
+
TRANSLATIONS_PT = {}
|
|
58
|
+
|
|
59
|
+
try:
|
|
60
|
+
from ja_translations import TRANSLATIONS_JA
|
|
61
|
+
except ImportError:
|
|
62
|
+
print("Warning: Could not import Japanese translations (ja_translations.py)")
|
|
63
|
+
TRANSLATIONS_JA = {}
|
|
64
|
+
|
|
65
|
+
try:
|
|
66
|
+
from hi_translations import TRANSLATIONS_HI
|
|
67
|
+
except ImportError:
|
|
68
|
+
print("Warning: Could not import Hindi translations (hi_translations.py)")
|
|
69
|
+
TRANSLATIONS_HI = {}
|
|
70
|
+
|
|
71
|
+
try:
|
|
72
|
+
from sw_translations import TRANSLATIONS_SW
|
|
73
|
+
except ImportError:
|
|
74
|
+
print("Warning: Could not import Swahili translations (sw_translations.py)")
|
|
75
|
+
TRANSLATIONS_SW = {}
|
|
76
|
+
|
|
77
|
+
try:
|
|
78
|
+
from uk_translations import TRANSLATIONS_UK
|
|
79
|
+
except ImportError:
|
|
80
|
+
print("Warning: Could not import Ukrainian translations (uk_translations.py)")
|
|
81
|
+
TRANSLATIONS_UK = {}
|
|
82
|
+
|
|
83
|
+
try:
|
|
84
|
+
from ru_translations import TRANSLATIONS_RU
|
|
85
|
+
except ImportError:
|
|
86
|
+
print("Warning: Could not import Russian translations (ru_translations.py)")
|
|
87
|
+
TRANSLATIONS_RU = {}
|
|
88
|
+
|
|
89
|
+
try:
|
|
90
|
+
from ar_translations import TRANSLATIONS_AR
|
|
91
|
+
except ImportError:
|
|
92
|
+
print("Warning: Could not import Arabic translations (ar_translations.py)")
|
|
93
|
+
TRANSLATIONS_AR = {}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def inject_translations_into_ts(ts_file: Path, translations: dict, lang: str):
|
|
97
|
+
"""
|
|
98
|
+
Inject translations into a .ts file.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
ts_file: Path to the .ts file
|
|
102
|
+
translations: Dict of {context: {source: translation}}
|
|
103
|
+
lang: Language code (it, fr, es)
|
|
104
|
+
"""
|
|
105
|
+
if not ts_file.exists():
|
|
106
|
+
# Create a basic .ts file if it doesn't exist
|
|
107
|
+
with open(ts_file, 'w', encoding='utf-8') as f:
|
|
108
|
+
f.write(f'<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE TS>\n<TS version="2.1" language="{lang}">\n</TS>')
|
|
109
|
+
|
|
110
|
+
# Parse the existing .ts file
|
|
111
|
+
tree = ET.parse(ts_file)
|
|
112
|
+
root = tree.getroot()
|
|
113
|
+
|
|
114
|
+
injected_count = 0
|
|
115
|
+
|
|
116
|
+
# Build a map of existing contexts for fast lookup
|
|
117
|
+
context_elements = {}
|
|
118
|
+
for context in root.findall('context'):
|
|
119
|
+
name_elem = context.find('name')
|
|
120
|
+
if name_elem is not None and name_elem.text:
|
|
121
|
+
context_elements[name_elem.text] = context
|
|
122
|
+
|
|
123
|
+
# Iterate through all contexts in our translations
|
|
124
|
+
for context_name, context_translations in translations.items():
|
|
125
|
+
# Find or create the context element
|
|
126
|
+
if context_name in context_elements:
|
|
127
|
+
context = context_elements[context_name]
|
|
128
|
+
else:
|
|
129
|
+
context = ET.SubElement(root, 'context')
|
|
130
|
+
name_elem = ET.SubElement(context, 'name')
|
|
131
|
+
name_elem.text = context_name
|
|
132
|
+
context_elements[context_name] = context
|
|
133
|
+
|
|
134
|
+
# Build map of existing source strings in this context
|
|
135
|
+
existing_messages = {}
|
|
136
|
+
for message in context.findall('message'):
|
|
137
|
+
source = message.findtext('source')
|
|
138
|
+
if source:
|
|
139
|
+
existing_messages[source] = message
|
|
140
|
+
|
|
141
|
+
# Iterate through all translations in this context
|
|
142
|
+
for source, translation_text in context_translations.items():
|
|
143
|
+
if source in existing_messages:
|
|
144
|
+
message = existing_messages[source]
|
|
145
|
+
# Find or create the translation element
|
|
146
|
+
translation = message.find('translation')
|
|
147
|
+
if translation is None:
|
|
148
|
+
translation = ET.SubElement(message, 'translation')
|
|
149
|
+
else:
|
|
150
|
+
# Create a new message element
|
|
151
|
+
message = ET.SubElement(context, 'message')
|
|
152
|
+
source_elem = ET.SubElement(message, 'source')
|
|
153
|
+
source_elem.text = source
|
|
154
|
+
translation = ET.SubElement(message, 'translation')
|
|
155
|
+
|
|
156
|
+
# Set the translation text and remove 'unfinished' type
|
|
157
|
+
translation.text = translation_text
|
|
158
|
+
if 'type' in translation.attrib:
|
|
159
|
+
del translation.attrib['type']
|
|
160
|
+
|
|
161
|
+
injected_count += 1
|
|
162
|
+
|
|
163
|
+
# Write back the modified .ts file with pretty printing if possible
|
|
164
|
+
# We'll just use the default write for now
|
|
165
|
+
tree.write(ts_file, encoding='utf-8', xml_declaration=True)
|
|
166
|
+
|
|
167
|
+
return injected_count
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def run_lrelease(ts_file: Path):
|
|
171
|
+
"""
|
|
172
|
+
Compile a .ts file to .qm using pyside6-lrelease or lrelease.
|
|
173
|
+
"""
|
|
174
|
+
import subprocess
|
|
175
|
+
import sys
|
|
176
|
+
|
|
177
|
+
qm_file = ts_file.with_suffix('.qm')
|
|
178
|
+
|
|
179
|
+
# Try common command names
|
|
180
|
+
cmds = ['pyside6-lrelease', 'lrelease']
|
|
181
|
+
|
|
182
|
+
# Try to find lrelease in the same directory as sys.executable (often in Scripts on Windows)
|
|
183
|
+
scripts_dir = Path(sys.executable).parent
|
|
184
|
+
cmds.append(str(scripts_dir / 'pyside6-lrelease.exe'))
|
|
185
|
+
cmds.append(str(scripts_dir / 'lrelease.exe'))
|
|
186
|
+
|
|
187
|
+
# Try to find it in site-packages/PySide6 (where I found it)
|
|
188
|
+
try:
|
|
189
|
+
import PySide6
|
|
190
|
+
pyside6_dir = Path(PySide6.__file__).parent
|
|
191
|
+
cmds.append(str(pyside6_dir / 'lrelease.exe'))
|
|
192
|
+
cmds.append(str(pyside6_dir / 'pyside6-lrelease.exe'))
|
|
193
|
+
except ImportError:
|
|
194
|
+
pass
|
|
195
|
+
|
|
196
|
+
for cmd in cmds:
|
|
197
|
+
try:
|
|
198
|
+
result = subprocess.run(
|
|
199
|
+
[cmd, str(ts_file), '-qm', str(qm_file)],
|
|
200
|
+
capture_output=True,
|
|
201
|
+
text=True
|
|
202
|
+
)
|
|
203
|
+
if result.returncode == 0:
|
|
204
|
+
print(f" Success using {cmd}")
|
|
205
|
+
return True
|
|
206
|
+
except FileNotFoundError:
|
|
207
|
+
continue
|
|
208
|
+
|
|
209
|
+
return False
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def main():
|
|
213
|
+
print("=" * 60)
|
|
214
|
+
print("Seti Astro Suite Pro - Translation Integration")
|
|
215
|
+
print("=" * 60)
|
|
216
|
+
|
|
217
|
+
# Translation data
|
|
218
|
+
translations_data = {
|
|
219
|
+
'it': TRANSLATIONS_IT,
|
|
220
|
+
'fr': TRANSLATIONS_FR,
|
|
221
|
+
'es': TRANSLATIONS_ES,
|
|
222
|
+
'zh': TRANSLATIONS_ZH,
|
|
223
|
+
'de': TRANSLATIONS_DE,
|
|
224
|
+
'pt': TRANSLATIONS_PT,
|
|
225
|
+
'pt': TRANSLATIONS_PT,
|
|
226
|
+
'ja': TRANSLATIONS_JA,
|
|
227
|
+
'hi': TRANSLATIONS_HI,
|
|
228
|
+
'sw': TRANSLATIONS_SW,
|
|
229
|
+
'uk': TRANSLATIONS_UK,
|
|
230
|
+
'ru': TRANSLATIONS_RU,
|
|
231
|
+
'ar': TRANSLATIONS_AR,
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
# Print summary
|
|
235
|
+
print("\n[1] Loading translations...")
|
|
236
|
+
for lang, data in translations_data.items():
|
|
237
|
+
string_count = sum(len(v) for v in data.values())
|
|
238
|
+
context_count = len(data)
|
|
239
|
+
print(f" {lang.upper()}: {string_count} strings in {context_count} contexts")
|
|
240
|
+
|
|
241
|
+
# Inject translations into .ts files
|
|
242
|
+
print("\n[2] Injecting translations into .ts files...")
|
|
243
|
+
for lang, data in translations_data.items():
|
|
244
|
+
ts_file = SCRIPT_DIR / f"saspro_{lang}.ts"
|
|
245
|
+
count = inject_translations_into_ts(ts_file, data, lang)
|
|
246
|
+
print(f" {lang.upper()}: Injected {count} translations into {ts_file.name}")
|
|
247
|
+
|
|
248
|
+
# Compile .qm files
|
|
249
|
+
print("\n[3] Compiling .qm files...")
|
|
250
|
+
for lang in translations_data.keys():
|
|
251
|
+
ts_file = SCRIPT_DIR / f"saspro_{lang}.ts"
|
|
252
|
+
if ts_file.exists():
|
|
253
|
+
if run_lrelease(ts_file):
|
|
254
|
+
print(f" Compiled {ts_file.name} -> {ts_file.stem}.qm")
|
|
255
|
+
else:
|
|
256
|
+
print(f" Warning: Could not compile {ts_file.name}")
|
|
257
|
+
|
|
258
|
+
print("\n" + "=" * 60)
|
|
259
|
+
print("Translation integration complete!")
|
|
260
|
+
print("=" * 60)
|
|
261
|
+
|
|
262
|
+
print("\nNext steps:")
|
|
263
|
+
print("1. Restart the application")
|
|
264
|
+
print("2. Go to Settings > Language")
|
|
265
|
+
print("3. Select your preferred language")
|
|
266
|
+
print("4. Restart to apply changes")
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
if __name__ == '__main__':
|
|
270
|
+
main()
|