/**
 * i18n-pages.js — StockMaster Pro — v1.0.0
 * Traduction des textes générés dynamiquement par les pages JS
 * et des vues PHP (labels, colonnes, boutons, messages).
 *
 * Stratégie : dictionnaire FR → {lang: traduction}
 * Appliqué via TreeWalker sur les text nodes du DOM après chaque render.
 * Aucune modification des pages JS existantes requise.
 */
(function(){
  'use strict';

  // ── Dictionnaire principal ─────────────────────────────────────
  // Format : 'texte FR exact' : { en, de, es, it, nl, pt, pl, ru, tr, ar, ja, ko, zh, hi, id, uk }
  const D = {
    // Navigation / filtres
    'Tous magasins':          { en:'All warehouses',  de:'Alle Lager',        es:'Todos los almacenes', it:'Tutti i magazzini', nl:'Alle magazijnen',  pt:'Todos os armazéns',  pl:'Wszystkie magazyny',   ru:'Все склады',          tr:'Tüm depolar',        ar:'كل المستودعات',   ja:'全倉庫',      ko:'모든 창고',    zh:'所有仓库',   hi:'सभी गोदाम',        id:'Semua gudang' },
    'Tous types':             { en:'All types',       de:'Alle Typen',         es:'Todos los tipos',     it:'Tutti i tipi',     nl:'Alle types',       pt:'Todos os tipos',     pl:'Wszystkie typy',       ru:'Все типы',            tr:'Tüm tipler',         ar:'كل الأنواع',      ja:'全タイプ',    ko:'모든 유형',   zh:'所有类型',   hi:'सभी प्रकार',       id:'Semua jenis' },
    'Toutes catégories':      { en:'All categories',  de:'Alle Kategorien',    es:'Todas las categorías',it:'Tutte le categorie',nl:'Alle categorieën', pt:'Todas as categorias',pl:'Wszystkie kategorie',  ru:'Все категории',       tr:'Tüm kategoriler',    ar:'كل الفئات',       ja:'全カテゴリ',   ko:'모든 카테고리',zh:'所有类别',   hi:'सभी श्रेणियाँ',    id:'Semua kategori' },
    'Toutes marques':         { en:'All brands',      de:'Alle Marken',        es:'Todas las marcas',    it:'Tutti i marchi',   nl:'Alle merken',      pt:'Todas as marcas',    pl:'Wszystkie marki',      ru:'Все марки',           tr:'Tüm markalar',       ar:'كل العلامات',     ja:'全ブランド',  ko:'모든 브랜드', zh:'所有品牌',   hi:'सभी ब्रांड',       id:'Semua merek' },
    'Tous les types':         { en:'All types',       de:'Alle Typen',         es:'Todos los tipos',     it:'Tutti i tipi',     nl:'Alle types',       pt:'Todos os tipos',     pl:'Wszystkie typy',       ru:'Все типы',            tr:'Tüm tipler',         ar:'كل الأنواع',      ja:'全タイプ',    ko:'모든 유형',   zh:'所有类型',   hi:'सभी प्रकार',       id:'Semua jenis' },
    'Tous les magasins':      { en:'All warehouses',  de:'Alle Lager',         es:'Todos los almacenes', it:'Tutti i magazzini', nl:'Alle magazijnen', pt:'Todos os armazéns',  pl:'Wszystkie magazyny',   ru:'Все склады',          tr:'Tüm depolar',        ar:'كل المستودعات',   ja:'全倉庫',      ko:'모든 창고',   zh:'所有仓库',   hi:'सभी गोदाम',        id:'Semua gudang' },
    'Tous les produits':      { en:'All products',    de:'Alle Produkte',      es:'Todos los productos', it:'Tutti i prodotti',  nl:'Alle producten',  pt:'Todos os produtos',  pl:'Wszystkie produkty',   ru:'Все товары',          tr:'Tüm ürünler',        ar:'كل المنتجات',     ja:'全製品',      ko:'모든 제품',   zh:'所有产品',   hi:'सभी उत्पाद',       id:'Semua produk' },
    'Tous statuts':           { en:'All statuses',    de:'Alle Status',        es:'Todos los estados',   it:'Tutti gli stati',   nl:'Alle statussen',  pt:'Todos os estados',   pl:'Wszystkie statusy',    ru:'Все статусы',         tr:'Tüm durumlar',       ar:'كل الحالات',      ja:'全ステータス', ko:'모든 상태',  zh:'所有状态',   hi:'सभी स्थिति',       id:'Semua status' },
    'Tous les emplacements':  { en:'All locations',   de:'Alle Standorte',     es:'Todas las ubicaciones',it:'Tutti i luoghi',   nl:'Alle locaties',   pt:'Todas as localizações',pl:'Wszystkie lokalizacje',ru:'Все местоположения', tr:'Tüm konumlar',       ar:'كل المواقع',      ja:'全場所',      ko:'모든 위치',   zh:'所有位置',   hi:'सभी स्थान',        id:'Semua lokasi' },
    'Tous les emplacements':  { en:'All locations',   de:'Alle Standorte',     es:'Todas las ubicaciones',it:'Tutte le posizioni',nl:'Alle locaties',   pt:'Todas as localizações',pl:'Wszystkie lokalizacje',ru:'Все места',          tr:'Tüm konumlar',       ar:'كل المواقع',      ja:'全場所',      ko:'모든 위치',   zh:'所有位置',   hi:'सभी स्थान',        id:'Semua lokasi' },

    // Boutons actions
    'Ajouter':         { en:'Add',           de:'Hinzufügen',  es:'Agregar',      it:'Aggiungi',    nl:'Toevoegen',  pt:'Adicionar',  pl:'Dodaj',        ru:'Добавить',    tr:'Ekle',        ar:'إضافة',     ja:'追加',    ko:'추가',    zh:'添加',   hi:'जोड़ें',    id:'Tambah' },
    'Modifier':        { en:'Edit',          de:'Bearbeiten',  es:'Editar',       it:'Modifica',    nl:'Bewerken',   pt:'Editar',     pl:'Edytuj',       ru:'Изменить',    tr:'Düzenle',     ar:'تعديل',     ja:'編集',    ko:'편집',    zh:'编辑',   hi:'संपादित करें', id:'Edit' },
    'Supprimer':       { en:'Delete',        de:'Löschen',     es:'Eliminar',     it:'Elimina',     nl:'Verwijderen',pt:'Excluir',    pl:'Usuń',         ru:'Удалить',     tr:'Sil',         ar:'حذف',       ja:'削除',    ko:'삭제',    zh:'删除',   hi:'हटाएं',   id:'Hapus' },
    'Sauvegarder':     { en:'Save',          de:'Speichern',   es:'Guardar',      it:'Salva',       nl:'Opslaan',    pt:'Salvar',     pl:'Zapisz',       ru:'Сохранить',   tr:'Kaydet',      ar:'حفظ',       ja:'保存',    ko:'저장',    zh:'保存',   hi:'सहेजें',  id:'Simpan' },
    'Annuler':         { en:'Cancel',        de:'Abbrechen',   es:'Cancelar',     it:'Annulla',     nl:'Annuleren',  pt:'Cancelar',   pl:'Anuluj',       ru:'Отмена',      tr:'İptal',       ar:'إلغاء',     ja:'キャンセル',ko:'취소', zh:'取消',   hi:'रद्द करें', id:'Batal' },
    'Fermer':          { en:'Close',         de:'Schließen',   es:'Cerrar',       it:'Chiudi',      nl:'Sluiten',    pt:'Fechar',     pl:'Zamknij',      ru:'Закрыть',     tr:'Kapat',       ar:'إغلاق',     ja:'閉じる',  ko:'닫기',    zh:'关闭',   hi:'बंद करें', id:'Tutup' },
    'Créer':           { en:'Create',        de:'Erstellen',   es:'Crear',        it:'Crea',        nl:'Aanmaken',   pt:'Criar',      pl:'Utwórz',       ru:'Создать',     tr:'Oluştur',     ar:'إنشاء',     ja:'作成',    ko:'생성',    zh:'创建',   hi:'बनाएं',   id:'Buat' },
    'Valider':         { en:'Validate',      de:'Bestätigen',  es:'Validar',      it:'Convalida',   nl:'Valideren',  pt:'Validar',    pl:'Zatwierdź',    ru:'Подтвердить', tr:'Doğrula',     ar:'تحقق',      ja:'検証',    ko:'검증',    zh:'验证',   hi:'सत्यापित करें',id:'Validasi' },
    'Imprimer':        { en:'Print',         de:'Drucken',     es:'Imprimir',     it:'Stampa',      nl:'Afdrukken',  pt:'Imprimir',   pl:'Drukuj',       ru:'Печать',      tr:'Yazdır',      ar:'طباعة',     ja:'印刷',    ko:'인쇄',    zh:'打印',   hi:'प्रिंट',  id:'Cetak' },
    'Exporter':        { en:'Export',        de:'Exportieren', es:'Exportar',     it:'Esporta',     nl:'Exporteren', pt:'Exportar',   pl:'Eksportuj',    ru:'Экспорт',     tr:'Dışa aktar',  ar:'تصدير',     ja:'エクスポート',ko:'내보내기',zh:'导出', hi:'निर्यात',  id:'Ekspor' },
    'Rechercher':      { en:'Search',        de:'Suchen',      es:'Buscar',       it:'Cerca',       nl:'Zoeken',     pt:'Pesquisar',  pl:'Szukaj',       ru:'Поиск',       tr:'Ara',         ar:'بحث',       ja:'検索',    ko:'검색',    zh:'搜索',   hi:'खोजें',   id:'Cari' },
    'Actualiser':      { en:'Refresh',       de:'Aktualisieren',es:'Actualizar',  it:'Aggiorna',    nl:'Vernieuwen', pt:'Atualizar',  pl:'Odśwież',      ru:'Обновить',    tr:'Yenile',      ar:'تحديث',     ja:'更新',    ko:'새로고침', zh:'刷新',   hi:'रिफ्रेश', id:'Segarkan' },
    'Rafraîchir':      { en:'Refresh',       de:'Aktualisieren',es:'Actualizar',  it:'Aggiorna',    nl:'Vernieuwen', pt:'Atualizar',  pl:'Odśwież',      ru:'Обновить',    tr:'Yenile',      ar:'تحديث',     ja:'更新',    ko:'새로고침', zh:'刷新',   hi:'रिफ्रेश', id:'Segarkan' },
    'Synchroniser':    { en:'Sync',          de:'Synchronisieren',es:'Sincronizar',it:'Sincronizza', nl:'Synchroniseren',pt:'Sincronizar',pl:'Synchronizuj',ru:'Синхронизировать',tr:'Senkronize et',ar:'مزامنة',ja:'同期',    ko:'동기화',  zh:'同步',   hi:'सिंक',    id:'Sinkronkan' },
    'Vider':           { en:'Clear',         de:'Leeren',      es:'Vaciar',       it:'Svuota',      nl:'Leegmaken',  pt:'Limpar',     pl:'Wyczyść',      ru:'Очистить',    tr:'Temizle',     ar:'مسح',       ja:'クリア',  ko:'지우기',  zh:'清空',   hi:'साफ़ करें', id:'Bersihkan' },
    'Voir tout':       { en:'See all',       de:'Alle anzeigen',es:'Ver todo',     it:'Vedi tutto',  nl:'Alles zien', pt:'Ver tudo',   pl:'Zobacz wszystko',ru:'Посмотреть всё',tr:'Tümünü gör', ar:'عرض الكل',  ja:'全て見る', ko:'전체보기', zh:'查看全部',hi:'सब देखें', id:'Lihat semua' },
    'Gérer':           { en:'Manage',        de:'Verwalten',   es:'Gestionar',    it:'Gestisci',    nl:'Beheren',    pt:'Gerenciar',  pl:'Zarządzaj',    ru:'Управлять',   tr:'Yönet',       ar:'إدارة',     ja:'管理',    ko:'관리',    zh:'管理',   hi:'प्रबंधित करें',id:'Kelola' },
    'Filtres +':       { en:'Filters +',     de:'Filter +',    es:'Filtros +',    it:'Filtri +',    nl:'Filters +',  pt:'Filtros +',  pl:'Filtry +',     ru:'Фильтры +',   tr:'Filtreler +', ar:'فلاتر +',   ja:'フィルタ +',ko:'필터 +',  zh:'筛选 +', hi:'फ़िल्टर +', id:'Filter +' },
    'Filtres −':       { en:'Filters −',     de:'Filter −',    es:'Filtros −',    it:'Filtri −',    nl:'Filters −',  pt:'Filtros −',  pl:'Filtry −',     ru:'Фильтры −',   tr:'Filtreler −', ar:'فلاتر −',   ja:'フィルタ −',ko:'필터 −',  zh:'筛选 −', hi:'फ़िल्टर −', id:'Filter −' },

    // Colonnes tableaux
    'Date / Heure':    { en:'Date / Time',   de:'Datum / Zeit', es:'Fecha / Hora', it:'Data / Ora',  nl:'Datum / Tijd',pt:'Data / Hora', pl:'Data / Godzina',ru:'Дата / Время', tr:'Tarih / Saat', ar:'التاريخ / الوقت',ja:'日時',   ko:'날짜/시간', zh:'日期/时间',hi:'दिनांक/समय', id:'Tanggal/Jam' },
    'Date':            { en:'Date',          de:'Datum',       es:'Fecha',        it:'Data',        nl:'Datum',      pt:'Data',       pl:'Data',         ru:'Дата',        tr:'Tarih',       ar:'التاريخ',   ja:'日付',    ko:'날짜',    zh:'日期',   hi:'दिनांक',  id:'Tanggal' },
    'Type':            { en:'Type',          de:'Typ',         es:'Tipo',         it:'Tipo',        nl:'Type',       pt:'Tipo',       pl:'Typ',          ru:'Тип',         tr:'Tür',         ar:'النوع',     ja:'タイプ',  ko:'유형',    zh:'类型',   hi:'प्रकार',  id:'Jenis' },
    'Produit':         { en:'Product',       de:'Produkt',     es:'Producto',     it:'Prodotto',    nl:'Product',    pt:'Produto',    pl:'Produkt',      ru:'Товар',       tr:'Ürün',        ar:'المنتج',    ja:'製品',    ko:'제품',    zh:'产品',   hi:'उत्पाद',  id:'Produk' },
    'Produits':        { en:'Products',      de:'Produkte',    es:'Productos',    it:'Prodotti',    nl:'Producten',  pt:'Produtos',   pl:'Produkty',     ru:'Товары',      tr:'Ürünler',     ar:'المنتجات',  ja:'製品',    ko:'제품',    zh:'产品',   hi:'उत्पाद',  id:'Produk' },
    'Magasin':         { en:'Warehouse',     de:'Lager',       es:'Almacén',      it:'Magazzino',   nl:'Magazijn',   pt:'Armazém',    pl:'Magazyn',      ru:'Склад',       tr:'Depo',        ar:'المستودع',  ja:'倉庫',    ko:'창고',    zh:'仓库',   hi:'गोदाम',   id:'Gudang' },
    'Magasins':        { en:'Warehouses',    de:'Lager',       es:'Almacenes',    it:'Magazzini',   nl:'Magazijnen', pt:'Armazéns',   pl:'Magazyny',     ru:'Склады',      tr:'Depolar',     ar:'المستودعات',ja:'倉庫',    ko:'창고',    zh:'仓库',   hi:'गोदाम',   id:'Gudang' },
    'Quantité':        { en:'Quantity',      de:'Menge',       es:'Cantidad',     it:'Quantità',    nl:'Hoeveelheid',pt:'Quantidade', pl:'Ilość',        ru:'Количество',  tr:'Miktar',      ar:'الكمية',    ja:'数量',    ko:'수량',    zh:'数量',   hi:'मात्रा',  id:'Kuantitas' },
    'Qté':             { en:'Qty',           de:'Mge',         es:'Ctd',          it:'Qtà',         nl:'Hv',         pt:'Qtd',        pl:'Ilość',        ru:'Кол',         tr:'Mkt',         ar:'الكمية',    ja:'数量',    ko:'수량',    zh:'数量',   hi:'मात्रा',  id:'Jml' },
    'Stock':           { en:'Stock',         de:'Bestand',     es:'Stock',        it:'Stock',       nl:'Voorraad',   pt:'Estoque',    pl:'Stan',         ru:'Запас',       tr:'Stok',        ar:'المخزون',   ja:'在庫',    ko:'재고',    zh:'库存',   hi:'स्टॉक',   id:'Stok' },
    'Statut':          { en:'Status',        de:'Status',      es:'Estado',       it:'Stato',       nl:'Status',     pt:'Status',     pl:'Status',       ru:'Статус',      tr:'Durum',       ar:'الحالة',    ja:'ステータス',ko:'상태', zh:'状态',   hi:'स्थिति',  id:'Status' },
    'Actions':         { en:'Actions',       de:'Aktionen',    es:'Acciones',     it:'Azioni',      nl:'Acties',     pt:'Ações',      pl:'Akcje',        ru:'Действия',    tr:'Eylemler',    ar:'الإجراءات', ja:'アクション',ko:'작업', zh:'操作',   hi:'क्रियाएं', id:'Tindakan' },
    'Action':          { en:'Action',        de:'Aktion',      es:'Acción',       it:'Azione',      nl:'Actie',      pt:'Ação',       pl:'Akcja',        ru:'Действие',    tr:'Eylem',       ar:'إجراء',     ja:'アクション',ko:'작업', zh:'操作',   hi:'क्रिया',  id:'Tindakan' },
    'Opérateur':       { en:'Operator',      de:'Bediener',    es:'Operador',     it:'Operatore',   nl:'Operator',   pt:'Operador',   pl:'Operator',     ru:'Оператор',    tr:'Operatör',    ar:'المشغل',    ja:'オペレーター',ko:'운영자',zh:'操作员',hi:'ऑपरेटर', id:'Operator' },
    'Note':            { en:'Note',          de:'Notiz',       es:'Nota',         it:'Nota',        nl:'Notitie',    pt:'Nota',       pl:'Notatka',      ru:'Примечание',  tr:'Not',         ar:'ملاحظة',    ja:'メモ',    ko:'메모',    zh:'备注',   hi:'नोट',     id:'Catatan' },
    'Document':        { en:'Document',      de:'Dokument',    es:'Documento',    it:'Documento',   nl:'Document',   pt:'Documento',  pl:'Dokument',     ru:'Документ',    tr:'Belge',       ar:'المستند',   ja:'書類',    ko:'문서',    zh:'文件',   hi:'दस्तावेज़', id:'Dokumen' },
    'Valeur':          { en:'Value',         de:'Wert',        es:'Valor',        it:'Valore',      nl:'Waarde',     pt:'Valor',      pl:'Wartość',      ru:'Значение',    tr:'Değer',       ar:'القيمة',    ja:'価値',    ko:'값',      zh:'价值',   hi:'मूल्य',   id:'Nilai' },
    'Prix':            { en:'Price',         de:'Preis',       es:'Precio',       it:'Prezzo',      nl:'Prijs',      pt:'Preço',      pl:'Cena',         ru:'Цена',        tr:'Fiyat',       ar:'السعر',     ja:'価格',    ko:'가격',    zh:'价格',   hi:'कीमत',    id:'Harga' },
    'Catégorie':       { en:'Category',      de:'Kategorie',   es:'Categoría',    it:'Categoria',   nl:'Categorie',  pt:'Categoria',  pl:'Kategoria',    ru:'Категория',   tr:'Kategori',    ar:'الفئة',     ja:'カテゴリ', ko:'카테고리', zh:'类别',  hi:'श्रेणी',  id:'Kategori' },
    'Catégories':      { en:'Categories',    de:'Kategorien',  es:'Categorías',   it:'Categorie',   nl:'Categorieën',pt:'Categorias', pl:'Kategorie',    ru:'Категории',   tr:'Kategoriler', ar:'الفئات',    ja:'カテゴリ', ko:'카테고리', zh:'类别',  hi:'श्रेणियाँ', id:'Kategori' },
    'Fournisseur':     { en:'Supplier',      de:'Lieferant',   es:'Proveedor',    it:'Fornitore',   nl:'Leverancier',pt:'Fornecedor', pl:'Dostawca',     ru:'Поставщик',   tr:'Tedarikçi',   ar:'المورد',    ja:'サプライヤー',ko:'공급업체',zh:'供应商',hi:'आपूर्तिकर्ता',id:'Pemasok' },
    'Fournisseurs':    { en:'Suppliers',     de:'Lieferanten', es:'Proveedores',  it:'Fornitori',   nl:'Leveranciers',pt:'Fornecedores',pl:'Dostawcy',    ru:'Поставщики',  tr:'Tedarikçiler',ar:'الموردون',  ja:'サプライヤー',ko:'공급업체',zh:'供应商',hi:'आपूर्तिकर्ता',id:'Pemasok' },
    'Marque':          { en:'Brand',         de:'Marke',       es:'Marca',        it:'Marca',       nl:'Merk',       pt:'Marca',      pl:'Marka',        ru:'Марка',       tr:'Marka',       ar:'العلامة',   ja:'ブランド', ko:'브랜드',  zh:'品牌',   hi:'ब्रांड',  id:'Merek' },
    'Utilisateur':     { en:'User',          de:'Benutzer',    es:'Usuario',      it:'Utente',      nl:'Gebruiker',  pt:'Usuário',    pl:'Użytkownik',   ru:'Пользователь',tr:'Kullanıcı',   ar:'المستخدم',  ja:'ユーザー', ko:'사용자',  zh:'用户',   hi:'उपयोगकर्ता',id:'Pengguna' },
    'Emplacement':     { en:'Location',      de:'Standort',    es:'Ubicación',    it:'Posizione',   nl:'Locatie',    pt:'Localização',pl:'Lokalizacja',  ru:'Местоположение',tr:'Konum',      ar:'الموقع',    ja:'場所',    ko:'위치',    zh:'位置',   hi:'स्थान',   id:'Lokasi' },
    'Emplacements':    { en:'Locations',     de:'Standorte',   es:'Ubicaciones',  it:'Posizioni',   nl:'Locaties',   pt:'Localizações',pl:'Lokalizacje', ru:'Местоположения',tr:'Konumlar',   ar:'المواقع',   ja:'場所',    ko:'위치',    zh:'位置',   hi:'स्थान',   id:'Lokasi' },
    'Unité':           { en:'Unit',          de:'Einheit',     es:'Unidad',       it:'Unità',       nl:'Eenheid',    pt:'Unidade',    pl:'Jednostka',    ru:'Единица',     tr:'Birim',       ar:'الوحدة',    ja:'単位',    ko:'단위',    zh:'单位',   hi:'इकाई',    id:'Unit' },
    'Unités':          { en:'Units',         de:'Einheiten',   es:'Unidades',     it:'Unità',       nl:'Eenheden',   pt:'Unidades',   pl:'Jednostki',    ru:'Единицы',     tr:'Birimler',    ar:'الوحدات',   ja:'単位',    ko:'단위',    zh:'单位',   hi:'इकाइयाँ', id:'Unit' },
    'Unités totales':  { en:'Total units',   de:'Ges. Einheiten',es:'Unidades totales',it:'Unità totali',nl:'Totale eenheden',pt:'Unidades totais',pl:'Łączne jednostki',ru:'Всего единиц',tr:'Toplam birim',ar:'إجمالي الوحدات',ja:'合計数量',ko:'총 단위',zh:'总单位',hi:'कुल इकाइयाँ',id:'Total unit' },
    'SKU':             { en:'SKU',           de:'SKU',         es:'SKU',          it:'SKU',         nl:'SKU',        pt:'SKU',        pl:'SKU',          ru:'Артикул',     tr:'SKU',         ar:'رمز المنتج',ja:'SKU',     ko:'SKU',     zh:'SKU',    hi:'SKU',     id:'SKU' },
    'Min':             { en:'Min',           de:'Min',         es:'Mín',          it:'Min',         nl:'Min',        pt:'Mín',        pl:'Min',          ru:'Мин',         tr:'Min',         ar:'الحد الأدنى',ja:'最小',  ko:'최소',    zh:'最小',   hi:'न्यूनतम',  id:'Min' },
    'Max':             { en:'Max',           de:'Max',         es:'Máx',          it:'Max',         nl:'Max',        pt:'Máx',        pl:'Maks',         ru:'Макс',        tr:'Maks',        ar:'الحد الأقصى',ja:'最大',  ko:'최대',    zh:'最大',   hi:'अधिकतम',  id:'Maks' },
    'Seuil':           { en:'Threshold',     de:'Schwellwert', es:'Umbral',       it:'Soglia',      nl:'Drempel',    pt:'Limiar',     pl:'Próg',         ru:'Порог',       tr:'Eşik',        ar:'العتبة',    ja:'閾値',    ko:'임계값',  zh:'阈值',   hi:'सीमा',    id:'Ambang' },
    'Seuil mini':      { en:'Min threshold', de:'Mindestschwellwert',es:'Umbral mínimo',it:'Soglia minima',nl:'Minimumdrempel',pt:'Limiar mínimo',pl:'Próg minimalny',ru:'Мин. порог', tr:'Min eşik',    ar:'الحد الأدنى',ja:'最小閾値', ko:'최소 임계값',zh:'最小阈值',hi:'न्यूनतम सीमा',id:'Ambang min' },
    'Inventaire':      { en:'Inventory',     de:'Inventur',    es:'Inventario',   it:'Inventario',  nl:'Inventaris', pt:'Inventário', pl:'Inwentarz',    ru:'Инвентарь',   tr:'Envanter',    ar:'المخزون',   ja:'在庫',    ko:'재고',    zh:'库存',   hi:'सूची',    id:'Inventaris' },
    'Raison / Chantier':{ en:'Reason / Site',de:'Grund / Baustelle',es:'Razón / Obra',it:'Motivo / Cantiere',nl:'Reden / Werf',pt:'Motivo / Obra',pl:'Powód / Plac',ru:'Причина / Объект',tr:'Neden / Şantiye',ar:'السبب / الموقع',ja:'理由 / 現場',ko:'이유 / 현장',zh:'原因 / 工地',hi:'कारण / साइट',id:'Alasan / Lokasi' },
    'Pièce':           { en:'Receipt',       de:'Beleg',       es:'Pieza',        it:'Pezzo',       nl:'Stuk',       pt:'Peça',       pl:'Paragon',      ru:'Документ',    tr:'Fiş',         ar:'إيصال',     ja:'伝票',    ko:'영수증',  zh:'凭证',   hi:'पर्ची',   id:'Bukti' },
    'Zone':            { en:'Zone',          de:'Zone',        es:'Zona',         it:'Zona',        nl:'Zone',       pt:'Zona',       pl:'Strefa',       ru:'Зона',        tr:'Bölge',       ar:'المنطقة',   ja:'ゾーン',  ko:'구역',    zh:'区域',   hi:'क्षेत्र', id:'Zona' },

    // Mouvements types
    'Ajout':           { en:'Add',           de:'Hinzufügen',  es:'Añadir',       it:'Aggiunta',    nl:'Toevoegen',  pt:'Adicionar',  pl:'Dodanie',      ru:'Добавление',  tr:'Ekleme',      ar:'إضافة',     ja:'追加',    ko:'추가',    zh:'添加',   hi:'जोड़',    id:'Tambah' },
    'AJOUT':           { en:'ADD',           de:'HINZUF.',     es:'AÑADIR',       it:'AGGIUNTA',    nl:'TOEV.',      pt:'ADIÇÃO',     pl:'DODANIE',      ru:'ДОБАВЛ.',     tr:'EKLEME',      ar:'إضافة',     ja:'追加',    ko:'추가',    zh:'添加',   hi:'जोड़',    id:'TAMBAH' },
    'Entrée':          { en:'Entry',         de:'Eingang',     es:'Entrada',      it:'Entrata',     nl:'Inkomst',    pt:'Entrada',    pl:'Przyjęcie',    ru:'Приход',      tr:'Giriş',       ar:'إدخال',     ja:'入庫',    ko:'입고',    zh:'入库',   hi:'प्रवेश',  id:'Masuk' },
    'ENTRÉE':          { en:'ENTRY',         de:'EINGANG',     es:'ENTRADA',      it:'ENTRATA',     nl:'INKOMST',    pt:'ENTRADA',    pl:'PRZYJĘCIE',    ru:'ПРИХОД',      tr:'GİRİŞ',       ar:'إدخال',     ja:'入庫',    ko:'입고',    zh:'入库',   hi:'प्रवेश',  id:'MASUK' },
    'Sortie':          { en:'Exit',          de:'Ausgang',     es:'Salida',       it:'Uscita',      nl:'Uitgang',    pt:'Saída',      pl:'Wydanie',      ru:'Расход',      tr:'Çıkış',       ar:'خروج',      ja:'出庫',    ko:'출고',    zh:'出库',   hi:'बाहर',    id:'Keluar' },
    'SORTIE':          { en:'EXIT',          de:'AUSGANG',     es:'SALIDA',       it:'USCITA',      nl:'UITGANG',    pt:'SAÍDA',      pl:'WYDANIE',      ru:'РАСХОД',      tr:'ÇIKIŞ',       ar:'خروج',      ja:'出庫',    ko:'출고',    zh:'出库',   hi:'बाहर',    id:'KELUAR' },
    'Transfert':       { en:'Transfer',      de:'Transfer',    es:'Transferencia',it:'Trasferimento',nl:'Transfer',  pt:'Transferência',pl:'Transfer',    ru:'Перемещение', tr:'Transfer',    ar:'نقل',       ja:'転送',    ko:'이전',    zh:'转移',   hi:'स्थानांतरण',id:'Transfer' },
    'TRANSFERT':       { en:'TRANSFER',      de:'TRANSFER',    es:'TRANSF.',      it:'TRASFЕР.',    nl:'TRANSFER',   pt:'TRANSF.',    pl:'TRANSFER',     ru:'ПЕРЕМ.',      tr:'TRANSFER',    ar:'نقل',       ja:'転送',    ko:'이전',    zh:'转移',   hi:'स्थानांतरण',id:'TRANSFER' },
    'INVENTAIRE':      { en:'INVENTORY',     de:'INVENTUR',    es:'INVENTARIO',   it:'INVENTARIO',  nl:'INVENTARIS', pt:'INVENTÁRIO', pl:'INWENTARZ',    ru:'ИНВЕНТАРЬ',   tr:'ENVANTER',    ar:'جرد',       ja:'在庫',    ko:'재고',    zh:'库存',   hi:'सूची',    id:'INVENTARIS' },
    'Ajout de stock':  { en:'Stock entry',   de:'Bestandszugang',es:'Entrada de stock',it:'Aggiunta stock',nl:'Voorraad toevoegen',pt:'Entrada de estoque',pl:'Przyjęcie towaru',ru:'Приход товара',tr:'Stok girişi',ar:'إضافة مخزون',ja:'入庫',ko:'재고 입고',zh:'入库',hi:'स्टॉक जोड़ें',id:'Tambah stok' },
    'Sortie de stock': { en:'Stock exit',    de:'Bestandsabgang',es:'Salida de stock',it:'Uscita stock',nl:'Voorraad uitnemen',pt:'Saída de estoque',pl:'Wydanie towaru',ru:'Расход товара',tr:'Stok çıkışı',ar:'خروج مخزون',ja:'出庫',ko:'재고 출고',zh:'出库',hi:'स्टॉक निकालें',id:'Keluar stok' },

    // Dashboard
    'Activité récente':     { en:'Recent activity',  de:'Letzte Aktivität',  es:'Actividad reciente', it:'Attività recente',  nl:'Recente activiteit',pt:'Atividade recente',pl:'Ostatnia aktywność',ru:'Последние действия',tr:'Son aktivite',      ar:'النشاط الأخير',   ja:'最近の活動',  ko:'최근 활동',   zh:'近期活动',   hi:'हाल की गतिविधि',   id:'Aktivitas terbaru' },
    'Alertes actives':      { en:'Active alerts',    de:'Aktive Warnungen',   es:'Alertas activas',    it:'Avvisi attivi',     nl:'Actieve waarschuwingen',pt:'Alertas ativos',pl:'Aktywne alerty',   ru:'Активные оповещения',tr:'Aktif uyarılar',  ar:'التنبيهات النشطة',ja:'有効アラート', ko:'활성 알림',   zh:'活跃警报',   hi:'सक्रिय अलर्ट',     id:'Peringatan aktif' },
    'Aperçu du stock':      { en:'Stock overview',   de:'Bestandsübersicht',  es:'Resumen de stock',   it:'Panoramica stock',  nl:'Voorraadoverzicht', pt:'Visão geral do estoque',pl:'Przegląd stanu',ru:'Обзор склада',      tr:'Stok özeti',      ar:'نظرة على المخزون',ja:'在庫概要',    ko:'재고 개요',   zh:'库存概览',   hi:'स्टॉक अवलोकन',     id:'Ringkasan stok' },
    'Valorisation par magasin':{ en:'Value by warehouse',de:'Wert nach Lager',es:'Valor por almacén',it:'Valore per magazzino',nl:'Waarde per magazijn',pt:'Valor por armazém',pl:'Wartość według magazynu',ru:'Стоимость по складам',tr:'Depoya göre değer',ar:'القيمة حسب المستودع',ja:'倉庫別価値',ko:'창고별 가치',zh:'按仓库估值',hi:'गोदाम अनुसार मूल्य',id:'Nilai per gudang' },
    'Valeur de stock par magasin':{ en:'Stock value by warehouse',de:'Lagerwert nach Lager',es:'Valor de stock por almacén',it:'Valore stock per magazzino',nl:'Voorraadwaarde per magazijn',pt:'Valor do estoque por armazém',pl:'Wartość stanu wg magazynu',ru:'Стоимость запасов по складам',tr:'Depoya göre stok değeri',ar:'قيمة المخزون حسب المستودع',ja:'倉庫別在庫価値',ko:'창고별 재고 가치',zh:'按仓库库存价值',hi:'गोदाम अनुसार स्टॉक मूल्य',id:'Nilai stok per gudang' },

    // Alertes page
    'Alertes critiques':    { en:'Critical alerts',  de:'Kritische Warnungen',es:'Alertas críticas',   it:'Avvisi critici',    nl:'Kritieke waarschuwingen',pt:'Alertas críticos',pl:'Krytyczne alerty',  ru:'Критические оповещения',tr:'Kritik uyarılar', ar:'التنبيهات الحرجة',ja:'重大アラート', ko:'심각한 알림', zh:'严重警报',   hi:'गंभीर अलर्ट',      id:'Peringatan kritis' },
    'Alertes actives':      { en:'Active alerts',    de:'Aktive Warnungen',   es:'Alertas activas',    it:'Avvisi attivi',     nl:'Actieve waarschuwingen',pt:'Alertas ativos',pl:'Aktywne alerty',   ru:'Активные оповещения',tr:'Aktif uyarılar',  ar:'التنبيهات النشطة',ja:'有効アラート', ko:'활성 알림',   zh:'活跃警报',   hi:'सक्रिय अलर्ट',     id:'Peringatan aktif' },
    'Produits OK':          { en:'Products OK',      de:'Produkte OK',        es:'Productos OK',       it:'Prodotti OK',       nl:'Producten OK',     pt:'Produtos OK',    pl:'Produkty OK',      ru:'Товары OK',          tr:'Ürünler OK',      ar:'المنتجات بخير',   ja:'製品OK',      ko:'제품 OK',     zh:'产品OK',     hi:'उत्पाद ठीक',       id:'Produk OK' },
    'Status actuel':        { en:'Current status',   de:'Aktueller Status',   es:'Estado actual',      it:'Stato attuale',     nl:'Huidige status',   pt:'Status atual',   pl:'Aktualny status',  ru:'Текущий статус',     tr:'Mevcut durum',    ar:'الوضع الحالي',    ja:'現在の状態',  ko:'현재 상태',   zh:'当前状态',   hi:'वर्तमान स्थिति',   id:'Status saat ini' },
    'Règles d\'alerte':     { en:'Alert rules',      de:'Warnregeln',         es:'Reglas de alerta',   it:'Regole di avviso',  nl:'Waarschuwingsregels',pt:'Regras de alerta',pl:'Reguły alertów',  ru:'Правила оповещений', tr:'Uyarı kuralları', ar:'قواعد التنبيه',   ja:'アラートルール',ko:'알림 규칙',  zh:'警报规则',   hi:'अलर्ट नियम',       id:'Aturan peringatan' },
    'Aucune alerte active — tout est en ordre':{ en:'No active alert — all is fine', de:'Keine aktiven Warnungen — alles in Ordnung', es:'Sin alertas activas — todo está bien', it:'Nessun avviso attivo — tutto in ordine', nl:'Geen actieve waarschuwingen — alles in orde', pt:'Nenhum alerta ativo — tudo bem', pl:'Brak aktywnych alertów — wszystko w porządku', ru:'Нет активных оповещений — всё в порядке', tr:'Aktif uyarı yok — her şey yolunda', ar:'لا تنبيهات نشطة — كل شيء على ما يرام', ja:'有効アラートなし — 正常', ko:'활성 알림 없음 — 정상', zh:'无活跃警报 — 一切正常', hi:'कोई सक्रिय अलर्ट नहीं — सब ठीक है', id:'Tidak ada peringatan aktif — semua baik' },
    'Nouvelle alerte':      { en:'New alert',        de:'Neue Warnung',       es:'Nueva alerta',       it:'Nuovo avviso',      nl:'Nieuwe waarschuwing',pt:'Novo alerta',    pl:'Nowy alert',       ru:'Новое оповещение',   tr:'Yeni uyarı',      ar:'تنبيه جديد',      ja:'新しいアラート',ko:'새 알림',    zh:'新警报',     hi:'नया अलर्ट',        id:'Peringatan baru' },
    'Modifier alerte':      { en:'Edit alert',       de:'Warnung bearbeiten', es:'Editar alerta',      it:'Modifica avviso',   nl:'Waarschuwing bewerken',pt:'Editar alerta',  pl:'Edytuj alert',     ru:'Изменить оповещение',tr:'Uyarıyı düzenle', ar:'تعديل التنبيه',   ja:'アラート編集',  ko:'알림 편집',   zh:'编辑警报',   hi:'अलर्ट संपादित करें',id:'Edit peringatan' },

    // Scanner
    'Caméra inactive':      { en:'Camera inactive',  de:'Kamera inaktiv',     es:'Cámara inactiva',    it:'Fotocamera inattiva',nl:'Camera inactief',  pt:'Câmera inativa', pl:'Kamera nieaktywna',ru:'Камера неактивна',   tr:'Kamera etkin değil',ar:'الكاميرا غير نشطة',ja:'カメラ非アクティブ',ko:'카메라 비활성',zh:'相机未激活',hi:'कैमरा निष्क्रिय',id:'Kamera tidak aktif' },
    'Saisie manuelle':      { en:'Manual entry',     de:'Manuelle Eingabe',   es:'Entrada manual',     it:'Inserimento manuale',nl:'Handmatige invoer',pt:'Entrada manual',  pl:'Wpis ręczny',      ru:'Ввод вручную',       tr:'Manuel giriş',    ar:'إدخال يدوي',      ja:'手動入力',    ko:'수동 입력',   zh:'手动输入',   hi:'मैन्युअल प्रविष्टि',id:'Input manual' },
    'Scans récents':        { en:'Recent scans',     de:'Letzte Scans',       es:'Escaneos recientes', it:'Scansioni recenti',  nl:'Recente scans',    pt:'Scans recentes',  pl:'Ostatnie skany',   ru:'Последние сканы',    tr:'Son taramalar',   ar:'المسح الأخير',    ja:'最近のスキャン',ko:'최근 스캔',  zh:'最近扫描',   hi:'हाल के स्कैन',     id:'Scan terbaru' },
    'Aucun scan récent':    { en:'No recent scan',   de:'Kein aktueller Scan',es:'Sin escaneos recientes',it:'Nessuna scansione recente',nl:'Geen recente scans',pt:'Nenhum scan recente',pl:'Brak ostatnich skanów',ru:'Нет недавних сканов',tr:'Son tarama yok',  ar:'لا مسح حديث',     ja:'最近のスキャンなし',ko:'최근 스캔 없음',zh:'无最近扫描',hi:'कोई हालिया स्कैन नहीं',id:'Tidak ada scan terbaru' },
    'Produit trouvé':       { en:'Product found',    de:'Produkt gefunden',   es:'Producto encontrado',it:'Prodotto trovato',  nl:'Product gevonden', pt:'Produto encontrado',pl:'Produkt znaleziony',ru:'Товар найден',      tr:'Ürün bulundu',    ar:'تم إيجاد المنتج', ja:'製品が見つかりました',ko:'제품 찾음',zh:'找到产品',   hi:'उत्पाद मिला',      id:'Produk ditemukan' },

    // Mouvements page
    'mouvement(s)':        { en:'movement(s)',      de:'Bewegung(en)',       es:'movimiento(s)',      it:'movimento/i',       nl:'beweging(en)',     pt:'movimento(s)',    pl:'ruch(y)',          ru:'движение(я)',        tr:'hareket(ler)',    ar:'حركة (حركات)',   ja:'移動',        ko:'이동(들)',    zh:'移动',       hi:'गतिविधि',          id:'pergerakan' },

    // Labels forms
    'Nouveau produit':      { en:'New product',      de:'Neues Produkt',      es:'Nuevo producto',     it:'Nuovo prodotto',    nl:'Nieuw product',    pt:'Novo produto',   pl:'Nowy produkt',     ru:'Новый товар',        tr:'Yeni ürün',       ar:'منتج جديد',       ja:'新製品',      ko:'새 제품',     zh:'新产品',     hi:'नया उत्पाद',       id:'Produk baru' },
    'Modifier produit':     { en:'Edit product',     de:'Produkt bearbeiten', es:'Editar producto',    it:'Modifica prodotto', nl:'Product bewerken', pt:'Editar produto', pl:'Edytuj produkt',   ru:'Изменить товар',     tr:'Ürünü düzenle',   ar:'تعديل المنتج',    ja:'製品を編集',  ko:'제품 편집',   zh:'编辑产品',   hi:'उत्पाद संपादित करें',id:'Edit produk' },
    'QR interne':           { en:'Internal QR',      de:'Interner QR',        es:'QR interno',         it:'QR interno',        nl:'Intern QR',        pt:'QR interno',     pl:'Wewnętrzny QR',    ru:'Внутренний QR',      tr:'Dahili QR',       ar:'QR داخلي',        ja:'内部QR',      ko:'내부 QR',     zh:'内部QR',     hi:'आंतरिक QR',        id:'QR internal' },
    'Ajouter':              { en:'Add',              de:'Hinzufügen',         es:'Agregar',            it:'Aggiungi',          nl:'Toevoegen',        pt:'Adicionar',      pl:'Dodaj',            ru:'Добавить',           tr:'Ekle',            ar:'إضافة',           ja:'追加',        ko:'추가',        zh:'添加',       hi:'जोड़ें',          id:'Tambah' },
    'Nom obligatoire':      { en:'Name required',    de:'Name erforderlich',  es:'Nombre obligatorio', it:'Nome obbligatorio', nl:'Naam verplicht',   pt:'Nome obrigatório',pl:'Nazwa wymagana',  ru:'Имя обязательно',    tr:'Ad gerekli',      ar:'الاسم مطلوب',     ja:'名前が必要',  ko:'이름 필수',   zh:'名称必填',   hi:'नाम आवश्यक',       id:'Nama wajib diisi' },
    'Choisissez un magasin':{ en:'Choose a warehouse',de:'Lager wählen',      es:'Elija un almacén',   it:'Scegli un magazzino',nl:'Kies een magazijn',pt:'Escolha um armazém',pl:'Wybierz magazyn', ru:'Выберите склад',     tr:'Depo seçin',      ar:'اختر مستودعاً',   ja:'倉庫を選択',  ko:'창고 선택',   zh:'选择仓库',   hi:'गोदाम चुनें',      id:'Pilih gudang' },
    'Choisissez un produit':{ en:'Choose a product', de:'Produkt wählen',     es:'Elija un producto',  it:'Scegli un prodotto',nl:'Kies een product', pt:'Escolha um produto',pl:'Wybierz produkt',ru:'Выберите товар',     tr:'Ürün seçin',      ar:'اختر منتجاً',     ja:'製品を選択',  ko:'제품 선택',   zh:'选择产品',   hi:'उत्पाद चुनें',     id:'Pilih produk' },

    // Messages toast
    'Produit créé':         { en:'Product created',  de:'Produkt erstellt',   es:'Producto creado',    it:'Prodotto creato',   nl:'Product aangemaakt',pt:'Produto criado',  pl:'Produkt utworzony',ru:'Товар создан',       tr:'Ürün oluşturuldu', ar:'تم إنشاء المنتج', ja:'製品が作成されました',ko:'제품 생성됨',zh:'产品已创建', hi:'उत्पाद बनाया',     id:'Produk dibuat' },
    'Produit mis à jour':   { en:'Product updated',  de:'Produkt aktualisiert',es:'Producto actualizado',it:'Prodotto aggiornato',nl:'Product bijgewerkt',pt:'Produto atualizado',pl:'Produkt zaktualizowany',ru:'Товар обновлён',  tr:'Ürün güncellendi', ar:'تم تحديث المنتج',ja:'製品が更新されました',ko:'제품 업데이트됨',zh:'产品已更新',hi:'उत्पाद अपडेट किया',id:'Produk diperbarui' },
    'Produit supprimé':     { en:'Product deleted',  de:'Produkt gelöscht',   es:'Producto eliminado', it:'Prodotto eliminato',nl:'Product verwijderd',pt:'Produto excluído', pl:'Produkt usunięty', ru:'Товар удалён',       tr:'Ürün silindi',    ar:'تم حذف المنتج',   ja:'製品が削除されました',ko:'제품 삭제됨',zh:'产品已删除', hi:'उत्पाद हटाया',     id:'Produk dihapus' },
    'Magasin créé':         { en:'Warehouse created',de:'Lager erstellt',     es:'Almacén creado',     it:'Magazzino creato',  nl:'Magazijn aangemaakt',pt:'Armazém criado', pl:'Magazyn utworzony', ru:'Склад создан',       tr:'Depo oluşturuldu',ar:'تم إنشاء المستودع',ja:'倉庫が作成されました',ko:'창고 생성됨',zh:'仓库已创建', hi:'गोदाम बनाया',      id:'Gudang dibuat' },
    'Magasin mis à jour':   { en:'Warehouse updated',de:'Lager aktualisiert', es:'Almacén actualizado',it:'Magazzino aggiornato',nl:'Magazijn bijgewerkt',pt:'Armazém atualizado',pl:'Magazyn zaktualizowany',ru:'Склад обновлён', tr:'Depo güncellendi', ar:'تم تحديث المستودع',ja:'倉庫が更新されました',ko:'창고 업데이트됨',zh:'仓库已更新',hi:'गोदाम अपडेट किया',id:'Gudang diperbarui' },
    'Magasin supprimé':     { en:'Warehouse deleted',de:'Lager gelöscht',     es:'Almacén eliminado',  it:'Magazzino eliminato',nl:'Magazijn verwijderd',pt:'Armazém excluído',pl:'Magazyn usunięty', ru:'Склад удалён',       tr:'Depo silindi',    ar:'تم حذف المستودع', ja:'倉庫が削除されました',ko:'창고 삭제됨',zh:'仓库已删除', hi:'गोदाम हटाया',      id:'Gudang dihapus' },
    'Mouvement enregistré': { en:'Movement saved',   de:'Bewegung gespeichert',es:'Movimiento guardado',it:'Movimento salvato',nl:'Beweging opgeslagen',pt:'Movimento salvo', pl:'Ruch zapisany',    ru:'Движение сохранено', tr:'Hareket kaydedildi',ar:'تم حفظ الحركة',  ja:'移動が保存されました',ko:'이동 저장됨', zh:'移动已保存', hi:'आवागमन दर्ज हुआ',   id:'Pergerakan disimpan' },
    'Inventaire validé avec succès !':{ en:'Inventory validated!', de:'Inventur bestätigt!', es:'Inventario validado!', it:'Inventario validato!', nl:'Inventaris gevalideerd!', pt:'Inventário validado!', pl:'Inwentarz zatwierdzony!', ru:'Инвентарь подтверждён!', tr:'Envanter doğrulandı!', ar:'تم التحقق من المخزون!', ja:'在庫確認済み！', ko:'재고 검증됨!', zh:'库存已验证!', hi:'इन्वेंटरी सत्यापित!', id:'Inventaris divalidasi!' },
    'Fournisseur créé':     { en:'Supplier created', de:'Lieferant erstellt', es:'Proveedor creado',   it:'Fornitore creato',  nl:'Leverancier aangemaakt',pt:'Fornecedor criado',pl:'Dostawca utworzony',ru:'Поставщик создан',   tr:'Tedarikçi oluşturuldu',ar:'تم إنشاء المورد',ja:'サプライヤーが作成されました',ko:'공급업체 생성됨',zh:'供应商已创建',hi:'आपूर्तिकर्ता बनाया',id:'Pemasok dibuat' },
    'Fournisseur supprimé': { en:'Supplier deleted', de:'Lieferant gelöscht', es:'Proveedor eliminado',it:'Fornitore eliminato',nl:'Leverancier verwijderd',pt:'Fornecedor excluído',pl:'Dostawca usunięty',ru:'Поставщик удалён',   tr:'Tedarikçi silindi', ar:'تم حذف المورد',   ja:'サプライヤーが削除されました',ko:'공급업체 삭제됨',zh:'供应商已删除',hi:'आपूर्तिकर्ता हटाया',id:'Pemasok dihapus' },
    'Alerte créée':         { en:'Alert created',    de:'Warnung erstellt',   es:'Alerta creada',      it:'Avviso creato',     nl:'Waarschuwing aangemaakt',pt:'Alerta criado',  pl:'Alert utworzony',  ru:'Оповещение создано', tr:'Uyarı oluşturuldu',ar:'تم إنشاء التنبيه',ja:'アラートが作成されました',ko:'알림 생성됨',zh:'警报已创建', hi:'अलर्ट बनाया',      id:'Peringatan dibuat' },
    'Alerte mise à jour':   { en:'Alert updated',    de:'Warnung aktualisiert',es:'Alerta actualizada', it:'Avviso aggiornato',nl:'Waarschuwing bijgewerkt',pt:'Alerta atualizado',pl:'Alert zaktualizowany',ru:'Оповещение обновлено',tr:'Uyarı güncellendi',ar:'تم تحديث التنبيه',ja:'アラートが更新されました',ko:'알림 업데이트됨',zh:'警报已更新',hi:'अलर्ट अपडेट किया',id:'Peringatan diperbarui' },
    'Alerte supprimée':     { en:'Alert deleted',    de:'Warnung gelöscht',   es:'Alerta eliminada',   it:'Avviso eliminato',  nl:'Waarschuwing verwijderd',pt:'Alerta excluído', pl:'Alert usunięty',   ru:'Оповещение удалено', tr:'Uyarı silindi',   ar:'تم حذف التنبيه',  ja:'アラートが削除されました',ko:'알림 삭제됨',zh:'警报已删除', hi:'अलर्ट हटाया',      id:'Peringatan dihapus' },
    'Paramètres sauvegardés':{ en:'Settings saved',  de:'Einstellungen gespeichert',es:'Configuración guardada',it:'Impostazioni salvate',nl:'Instellingen opgeslagen',pt:'Configurações salvas',pl:'Ustawienia zapisane',ru:'Настройки сохранены',tr:'Ayarlar kaydedildi',ar:'تم حفظ الإعدادات',ja:'設定が保存されました',ko:'설정 저장됨',zh:'设置已保存',hi:'सेटिंग्स सहेजी गईं',id:'Pengaturan disimpan' },

    // Divers
    'Identifiant':          { en:'Login',            de:'Anmeldename',        es:'Identificador',      it:'Identificativo',    nl:'Inlognaam',        pt:'Login',          pl:'Login',            ru:'Логин',              tr:'Kullanıcı adı',   ar:'اسم المستخدم',    ja:'ログイン',    ko:'로그인',      zh:'登录名',     hi:'लॉगिन',            id:'Login' },
    'Rôle':                 { en:'Role',             de:'Rolle',              es:'Rol',                it:'Ruolo',             nl:'Rol',              pt:'Função',         pl:'Rola',             ru:'Роль',               tr:'Rol',             ar:'الدور',           ja:'役割',        ko:'역할',        zh:'角色',       hi:'भूमिका',           id:'Peran' },
    'Adresse':              { en:'Address',          de:'Adresse',            es:'Dirección',          it:'Indirizzo',         nl:'Adres',            pt:'Endereço',       pl:'Adres',            ru:'Адрес',              tr:'Adres',           ar:'العنوان',         ja:'住所',        ko:'주소',        zh:'地址',       hi:'पता',              id:'Alamat' },
    'Contact':              { en:'Contact',          de:'Kontakt',            es:'Contacto',           it:'Contatto',         nl:'Contact',          pt:'Contato',        pl:'Kontakt',          ru:'Контакт',            tr:'İletişim',        ar:'اتصال',           ja:'連絡先',      ko:'연락처',      zh:'联系方式',   hi:'संपर्क',           id:'Kontak' },
    'Téléphone':            { en:'Phone',            de:'Telefon',            es:'Teléfono',           it:'Telefono',         nl:'Telefoon',         pt:'Telefone',       pl:'Telefon',          ru:'Телефон',            tr:'Telefon',         ar:'الهاتف',          ja:'電話',        ko:'전화',        zh:'电话',       hi:'फ़ोन',             id:'Telepon' },
    'Ligne(s)':             { en:'Line(s)',          de:'Zeile(n)',           es:'Línea(s)',           it:'Riga/Righe',        nl:'Regel(s)',         pt:'Linha(s)',       pl:'Linia/Linie',      ru:'Строка(и)',          tr:'Satır(lar)',      ar:'سطر (سطور)',      ja:'行',          ko:'줄',          zh:'行',         hi:'पंक्ति',           id:'Baris' },
    'En attente':           { en:'Pending',          de:'Ausstehend',         es:'Pendiente',          it:'In attesa',        nl:'In behandeling',   pt:'Pendente',       pl:'Oczekujący',       ru:'Ожидание',           tr:'Beklemede',       ar:'قيد الانتظار',    ja:'保留中',      ko:'대기 중',     zh:'待处理',     hi:'लंबित',            id:'Tertunda' },
    'Validés':              { en:'Validated',        de:'Bestätigt',          es:'Validados',          it:'Validati',         nl:'Gevalideerd',      pt:'Validados',      pl:'Zatwierdzone',     ru:'Подтверждены',       tr:'Doğrulandı',      ar:'تم التحقق',       ja:'検証済み',    ko:'검증됨',      zh:'已验证',     hi:'सत्यापित',         id:'Divalidasi' },
    'Stock bas':            { en:'Low stock',        de:'Niedriger Bestand',  es:'Stock bajo',         it:'Stock basso',      nl:'Lage voorraad',    pt:'Estoque baixo',  pl:'Niski stan',       ru:'Мало на складе',     tr:'Düşük stok',      ar:'مخزون منخفض',    ja:'在庫少',      ko:'재고 부족',   zh:'库存低',     hi:'कम स्टॉक',         id:'Stok rendah' },
    'Stock normal':         { en:'Normal stock',     de:'Normaler Bestand',   es:'Stock normal',       it:'Stock normale',    nl:'Normale voorraad', pt:'Estoque normal', pl:'Normalny stan',    ru:'Нормальный запас',   tr:'Normal stok',     ar:'مخزون طبيعي',    ja:'在庫通常',    ko:'정상 재고',   zh:'正常库存',   hi:'सामान्य स्टॉक',    id:'Stok normal' },
    'Stock bas uniquement': { en:'Low stock only',   de:'Nur niedrig',        es:'Solo stock bajo',    it:'Solo basso',       nl:'Alleen laag',      pt:'Apenas baixo',   pl:'Tylko niski',      ru:'Только мало',        tr:'Yalnızca düşük',  ar:'منخفض فقط',      ja:'在庫少のみ',   ko:'재고 부족만',  zh:'仅低库存',   hi:'केवल कम स्टॉक',    id:'Hanya stok rendah' },
    'Théorique':            { en:'Theoretical',      de:'Theoretisch',        es:'Teórico',            it:'Teorico',          nl:'Theoretisch',      pt:'Teórico',        pl:'Teoretyczny',      ru:'Теоретический',      tr:'Teorik',          ar:'نظري',            ja:'理論値',      ko:'이론값',      zh:'理论值',     hi:'सैद्धांतिक',       id:'Teoritis' },
    'Compté':               { en:'Counted',          de:'Gezählt',            es:'Contado',            it:'Contato',          nl:'Geteld',           pt:'Contado',        pl:'Policzony',        ru:'Подсчитано',         tr:'Sayılmış',        ar:'محسوب',           ja:'カウント済み',  ko:'계산됨',      zh:'已计数',     hi:'गिना गया',         id:'Dihitung' },
    'Écart':                { en:'Variance',         de:'Abweichung',         es:'Diferencia',         it:'Scarto',           nl:'Afwijking',        pt:'Variação',       pl:'Różnica',          ru:'Отклонение',         tr:'Sapma',           ar:'الفارق',          ja:'差異',        ko:'차이',        zh:'差异',       hi:'अंतर',             id:'Selisih' },
    'Écarts':               { en:'Variances',        de:'Abweichungen',       es:'Diferencias',        it:'Scarti',           nl:'Afwijkingen',      pt:'Variações',      pl:'Różnice',          ru:'Отклонения',         tr:'Sapmalar',        ar:'الفوارق',         ja:'差異',        ko:'차이',        zh:'差异',       hi:'अंतर',             id:'Selisih' },
    'Avec écart':           { en:'With variance',    de:'Mit Abweichung',     es:'Con diferencia',     it:'Con scarto',       nl:'Met afwijking',    pt:'Com variação',   pl:'Z różnicą',        ru:'С отклонением',      tr:'Sapmalı',         ar:'مع فارق',         ja:'差異あり',    ko:'차이 있음',   zh:'有差异',     hi:'अंतर के साथ',      id:'Dengan selisih' },

    // Labels colonnes inventaire/rapports
    'Qté actuelle':         { en:'Current qty',      de:'Akt. Menge',         es:'Cantidad actual',    it:'Qtà attuale',      nl:'Huidige hoeveelheid',pt:'Qtd. atual',    pl:'Bieżąca ilość',    ru:'Текущее кол-во',     tr:'Mevcut miktar',   ar:'الكمية الحالية',  ja:'現在数量',    ko:'현재 수량',   zh:'当前数量',   hi:'वर्तमान मात्रा',   id:'Jumlah saat ini' },
    'Stock actuel':         { en:'Current stock',    de:'Aktueller Bestand',  es:'Stock actual',       it:'Stock attuale',    nl:'Huidige voorraad', pt:'Estoque atual',  pl:'Bieżący stan',     ru:'Текущий запас',      tr:'Mevcut stok',     ar:'المخزون الحالي',  ja:'現在在庫',    ko:'현재 재고',   zh:'当前库存',   hi:'वर्तमान स्टॉक',    id:'Stok saat ini' },
    'Stock total':          { en:'Total stock',      de:'Gesamtbestand',      es:'Stock total',        it:'Stock totale',     nl:'Totale voorraad',  pt:'Estoque total',  pl:'Łączny stan',      ru:'Общий запас',        tr:'Toplam stok',     ar:'إجمالي المخزون',  ja:'合計在庫',    ko:'총 재고',     zh:'总库存',     hi:'कुल स्टॉक',        id:'Total stok' },
    'Stock théorique':      { en:'Theoretical stock',de:'Theoretischer Bestand',es:'Stock teórico',   it:'Stock teorico',    nl:'Theoretische voorraad',pt:'Estoque teórico',pl:'Teoretyczny stan',ru:'Теоретический запас',tr:'Teorik stok',    ar:'المخزون النظري',  ja:'理論在庫',    ko:'이론 재고',   zh:'理论库存',   hi:'सैद्धांतिक स्टॉक', id:'Stok teoritis' },
    'Valeur totale':        { en:'Total value',      de:'Gesamtwert',         es:'Valor total',        it:'Valore totale',    nl:'Totale waarde',    pt:'Valor total',    pl:'Łączna wartość',   ru:'Общая стоимость',    tr:'Toplam değer',    ar:'القيمة الإجمالية',ja:'合計価値',    ko:'총 가치',     zh:'总价值',     hi:'कुल मूल्य',        id:'Total nilai' },
    'Valeur totale stock':  { en:'Total stock value',de:'Gesamtlagerwert',    es:'Valor total stock',  it:'Valore totale stock',nl:'Totale voorraadwaarde',pt:'Valor total estoque',pl:'Łączna wartość stanu',ru:'Общая стоимость склада',tr:'Toplam stok değeri',ar:'إجمالي قيمة المخزون',ja:'在庫総価値',ko:'총 재고 가치', zh:'库存总价值',  hi:'कुल स्टॉक मूल्य',  id:'Total nilai stok' },
    'Total produits':       { en:'Total products',   de:'Produkte gesamt',    es:'Total productos',    it:'Totale prodotti',  nl:'Totaal producten', pt:'Total produtos',  pl:'Łącznie produktów',ru:'Всего товаров',       tr:'Toplam ürün',     ar:'إجمالي المنتجات', ja:'製品合計',    ko:'총 제품',     zh:'产品总数',   hi:'कुल उत्पाद',       id:'Total produk' },
    'Coût unit.':           { en:'Unit cost',        de:'Stückkosten',        es:'Costo unit.',        it:'Costo unit.',      nl:'Eenheidsprijs',    pt:'Custo unit.',    pl:'Koszt jedn.',      ru:'Цена за единицу',    tr:'Birim maliyet',   ar:'التكلفة للوحدة',  ja:'単価',        ko:'단가',        zh:'单位成本',   hi:'इकाई लागत',        id:'Biaya satuan' },
    'Coût unitaire':        { en:'Unit cost',        de:'Stückkosten',        es:'Costo unitario',     it:'Costo unitario',   nl:'Eenheidsprijs',    pt:'Custo unitário', pl:'Koszt jednostkowy',ru:'Цена за единицу',    tr:'Birim maliyet',   ar:'التكلفة للوحدة',  ja:'単価',        ko:'단가',        zh:'单位成本',   hi:'इकाई लागत',        id:'Biaya satuan' },
    'Date inventaire':      { en:'Inventory date',   de:'Inventurdatum',      es:'Fecha inventario',   it:'Data inventario',  nl:'Inventarisdatum',  pt:'Data de inventário',pl:'Data inwentarza',ru:'Дата инвентаря',     tr:'Envanter tarihi', ar:'تاريخ الجرد',     ja:'在庫日付',    ko:'재고 날짜',   zh:'库存日期',   hi:'इन्वेंटरी दिनांक', id:'Tanggal inventaris' },
    'Historique des inventaires':{ en:'Inventory history',de:'Inventurhistorie',es:'Historial de inventarios',it:'Storico inventari',nl:'Inventarishistorie',pt:'Histórico de inventários',pl:'Historia inwentarzy',ru:'История инвентаризаций',tr:'Envanter geçmişi',ar:'سجل الجرد',ja:'在庫履歴',ko:'재고 이력',zh:'库存历史',hi:'इन्वेंटरी इतिहास',id:'Riwayat inventaris' },

    // Options / Choisir
    '— Choisir —':              { en:'— Choose —',        de:'— Wählen —',     es:'— Elegir —',       it:'— Scegli —',      nl:'— Kiezen —',     pt:'— Escolher —',   pl:'— Wybierz —',     ru:'— Выбрать —',       tr:'— Seçin —',      ar:'— اختر —',       ja:'— 選択 —',   ko:'— 선택 —',   zh:'— 选择 —',  hi:'— चुनें —',    id:'— Pilih —' },
    '— Toutes catégories —':    { en:'— All categories —',de:'— Alle Kategorien —',es:'— Todas las categorías —',it:'— Tutte le categorie —',nl:'— Alle categorieën —',pt:'— Todas as categorias —',pl:'— Wszystkie kategorie —',ru:'— Все категории —',tr:'— Tüm kategoriler —',ar:'— كل الفئات —',ja:'— 全カテゴリ —',ko:'— 모든 카테고리 —',zh:'— 所有类别 —',hi:'— सभी श्रेणियाँ —',id:'— Semua kategori —' },
    '— Choisir un magasin d\'abord —':{ en:'— Choose a warehouse first —',de:'— Zuerst Lager wählen —',es:'— Elija primero un almacén —',it:'— Prima scegli un magazzino —',nl:'— Kies eerst een magazijn —',pt:'— Escolha um armazém primeiro —',pl:'— Najpierw wybierz magazyn —',ru:'— Сначала выберите склад —',tr:'— Önce depo seçin —',ar:'— اختر مستودعاً أولاً —',ja:'— 先に倉庫を選択 —',ko:'— 먼저 창고 선택 —',zh:'— 先选择仓库 —',hi:'— पहले गोदाम चुनें —',id:'— Pilih gudang dahulu —' },

    // Erreurs
    'Erreur':               { en:'Error',            de:'Fehler',             es:'Error',              it:'Errore',           nl:'Fout',             pt:'Erro',           pl:'Błąd',             ru:'Ошибка',             tr:'Hata',            ar:'خطأ',             ja:'エラー',      ko:'오류',        zh:'错误',       hi:'त्रुटि',           id:'Error' },
    'Produit introuvable':  { en:'Product not found',de:'Produkt nicht gefunden',es:'Producto no encontrado',it:'Prodotto non trovato',nl:'Product niet gevonden',pt:'Produto não encontrado',pl:'Nie znaleziono produktu',ru:'Товар не найден',tr:'Ürün bulunamadı',ar:'المنتج غير موجود',ja:'製品が見つかりません',ko:'제품을 찾을 수 없음',zh:'找不到产品',hi:'उत्पाद नहीं मिला',id:'Produk tidak ditemukan' },

    // Rapports
    'Rapport':              { en:'Report',           de:'Bericht',            es:'Informe',            it:'Rapporto',         nl:'Rapport',          pt:'Relatório',      pl:'Raport',           ru:'Отчёт',              tr:'Rapor',           ar:'التقرير',         ja:'レポート',    ko:'보고서',      zh:'报告',       hi:'रिपोर्ट',          id:'Laporan' },
    'CSV exporté':          { en:'CSV exported',     de:'CSV exportiert',     es:'CSV exportado',      it:'CSV esportato',    nl:'CSV geëxporteerd', pt:'CSV exportado',  pl:'CSV wyeksportowany',ru:'CSV экспортирован', tr:'CSV dışa aktarıldı',ar:'تم تصدير CSV',  ja:'CSVエクスポート済み',ko:'CSV 내보내기 완료',zh:'CSV已导出',hi:'CSV निर्यात किया',id:'CSV diekspor' },
    'PDF téléchargé':       { en:'PDF downloaded',   de:'PDF heruntergeladen',es:'PDF descargado',     it:'PDF scaricato',    nl:'PDF gedownload',   pt:'PDF baixado',    pl:'PDF pobrano',      ru:'PDF загружен',       tr:'PDF indirildi',   ar:'تم تنزيل PDF',   ja:'PDFダウンロード済み',ko:'PDF 다운로드됨',zh:'PDF已下载',hi:'PDF डाउनलोड किया',id:'PDF diunduh' },
    'Lignes':               { en:'Lines',            de:'Zeilen',             es:'Líneas',             it:'Righe',            nl:'Regels',           pt:'Linhas',         pl:'Linie',            ru:'Строки',             tr:'Satırlar',        ar:'الأسطر',          ja:'行数',        ko:'줄',          zh:'行',         hi:'पंक्तियाँ',        id:'Baris' },
    'Chantier / Site':      { en:'Site / Location',  de:'Baustelle / Standort',es:'Sitio / Lugar',     it:'Cantiere / Sito',  nl:'Werf / Locatie',   pt:'Obra / Local',   pl:'Plac / Lokalizacja',ru:'Объект / Площадка', tr:'Şantiye / Alan',  ar:'الموقع',          ja:'現場 / サイト', ko:'현장 / 위치',zh:'工地 / 地点',hi:'साइट / स्थान',id:'Lokasi / Situs' },
    'BL / Référence':       { en:'Receipt / Ref.',   de:'Beleg / Ref.',       es:'Albarán / Ref.',     it:'DDT / Rif.',       nl:'Bon / Ref.',       pt:'Guia / Ref.',    pl:'WZ / Ref.',        ru:'ТТН / Реф.',         tr:'İrsaliye / Ref.', ar:'وصل / مرجع',      ja:'伝票 / 参照',   ko:'전표 / 참조',zh:'单据 / 参考',hi:'बिल / संदर्भ',id:'BL / Referensi' },
  };

  // ── Moteur de traduction DOM ───────────────────────────────────
  // Traduit les text nodes du contenu principal après chaque render

  function translate(lang) {
    if (!lang || lang === 'fr') return;

    const main = document.getElementById('mainContent') || document.body;

    // TreeWalker sur tous les text nodes non vides
    const walker = document.createTreeWalker(
      main,
      NodeFilter.SHOW_TEXT,
      {
        acceptNode(node) {
          // Exclure scripts, styles, inputs
          const p = node.parentElement;
          if (!p) return NodeFilter.FILTER_REJECT;
          const tag = p.tagName;
          if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'INPUT' ||
              tag === 'TEXTAREA' || tag === 'SELECT') return NodeFilter.FILTER_REJECT;
          if (!node.textContent.trim()) return NodeFilter.FILTER_SKIP;
          return NodeFilter.FILTER_ACCEPT;
        }
      }
    );

    const nodes = [];
    let node;
    while ((node = walker.nextNode())) nodes.push(node);

    nodes.forEach(function(n) {
      const txt = n.textContent;
      const trimmed = txt.trim();
      if (!trimmed) return;

      // Chercher correspondance exacte d'abord
      if (D[trimmed] && D[trimmed][lang]) {
        n.textContent = txt.replace(trimmed, D[trimmed][lang]);
        return;
      }

      // Chercher correspondances partielles (ex: "52 mouvement(s)")
      let replaced = txt;
      let changed = false;
      Object.keys(D).forEach(function(fr) {
        if (!D[fr][lang]) return;
        if (replaced.includes(fr)) {
          replaced = replaced.split(fr).join(D[fr][lang]);
          changed = true;
        }
      });
      if (changed) n.textContent = replaced;
    });

    // Traduire aussi les placeholders
    main.querySelectorAll('[placeholder]').forEach(function(el) {
      const ph = el.getAttribute('placeholder');
      const trimmed = ph ? ph.trim() : '';
      if (D[trimmed] && D[trimmed][lang]) {
        el.setAttribute('placeholder', D[trimmed][lang]);
      }
    });

    // Traduire les attributs title
    main.querySelectorAll('[title]').forEach(function(el) {
      const t = el.getAttribute('title');
      const trimmed = t ? t.trim() : '';
      if (D[trimmed] && D[trimmed][lang]) {
        el.setAttribute('title', D[trimmed][lang]);
      }
    });
  }

  // ── Observer MutationObserver ──────────────────────────────────
  // Traduit automatiquement après chaque modification du DOM

  let _timer = null;
  function scheduleTranslate() {
    if (!_timer) {
      _timer = setTimeout(function() {
        _timer = null;
        var lang = window.SM_LANG || window._SM_LANG_PHP;
        if (lang && lang !== 'fr') translate(lang);
      }, 80);
    }
  }

  function startObserver() {
    const lang = window.SM_LANG || window._SM_LANG_PHP;
    if (!lang || lang === 'fr') return; // pas besoin en français

    const target = document.getElementById('mainContent') || document.body;
    const obs = new MutationObserver(scheduleTranslate);
    obs.observe(target, { childList: true, subtree: true, characterData: false });

    // Traduction initiale
    scheduleTranslate();
  }

  // ── Exposition globale ─────────────────────────────────────────
  window.SM_I18N_DOM = { translate: translate, D: D };

  // ── Init ───────────────────────────────────────────────────────
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', startObserver);
  } else {
    startObserver();
  }

})();
