Add stringtable validation tool (#7274)

* Add stringtable validation tool

* Add to CI
This commit is contained in:
mharis001 2019-11-18 13:48:40 -05:00 committed by PabstMirror
parent f99157604f
commit 2b4d807acc
29 changed files with 274 additions and 179 deletions

View File

@ -16,7 +16,9 @@ jobs:
run: python3 tools/sqf_validator.py
- name: Validate Config
run: python3 tools/config_style_checker.py
- name: Validate String Tables
- name: Validate Stringtables
run: python3 tools/stringtable_validator.py
- name: Check Strings
run: python3 tools/check_strings.py
- name: Check for BOM
uses: arma-actions/bom-check@master

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="ai">
<Key ID="STR_ACE_ai_GarrisonInvalidPosition">
<Package name="AI">
<Key ID="STR_ACE_AI_GarrisonInvalidPosition">
<English>Invalid position provided.</English>
<German>Ungültige Position</German>
<French>Position invalide fourni</French>
@ -14,7 +14,7 @@
<Russian>Указана неверная позиция</Russian>
<Portuguese>Posição inválida fornecida.</Portuguese>
</Key>
<Key ID="STR_ACE_ai_GarrisonNoUnits">
<Key ID="STR_ACE_AI_GarrisonNoUnits">
<English>No units provided.</English>
<German>Keine Einheit ausgewählt</German>
<French>Aucune unité fourni</French>
@ -27,7 +27,7 @@
<Russian>Не указаны юниты</Russian>
<Portuguese>Nenhuma unidade fornecida.</Portuguese>
</Key>
<Key ID="STR_ACE_ai_GarrisonNotEnoughPos">
<Key ID="STR_ACE_AI_GarrisonNotEnoughPos">
<English>There aren't enough positions to place all units.</English>
<German>Es gibt nicht genug Positionen, um alle Einheiten zu platzieren</German>
<French>Il n'y a pas assez de positions pour placer toutes les unités</French>
@ -40,7 +40,7 @@
<Russian>Недостаточно позиций для размещения всех юнитов</Russian>
<Portuguese>Não há posições suficientes para colocar todas as unidades.</Portuguese>
</Key>
<Key ID="STR_ACE_ai_GarrisonNoBuilding">
<Key ID="STR_ACE_AI_GarrisonNoBuilding">
<English>No building found.</English>
<German>Kein Gebäude gefunden</German>
<French>Aucun bâtiment trouvé</French>

View File

@ -442,70 +442,6 @@
<Chinese>沒聲音</Chinese>
<Chinesesimp>没声音</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TITLE">
<English>Accept Requests</English>
<German>Anfrage akzeptieren</German>
<Spanish>Aceptar peticiones</Spanish>
<Polish>Akceptuj prośby</Polish>
<Czech>Přijmout žádost</Czech>
<French>Accepter requête</French>
<Russian>Принять запросы</Russian>
<Hungarian>Kérések elfogadása</Hungarian>
<Portuguese>Aceitar Pedido</Portuguese>
<Italian>Accetta la richiesta</Italian>
<Japanese>要求を受け入れ</Japanese>
<Korean>요청 수락</Korean>
<Chinese>接受請求</Chinese>
<Chinesesimp>接受请求</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
<English>Decline Requests</English>
<German>Anfrage ablehnen</German>
<Spanish>Rechazar peticiones</Spanish>
<Polish>Ignoruj prośby</Polish>
<Czech>Zamítnout žádost</Czech>
<Russian>Отклонить запросы</Russian>
<French>Rejeter requête</French>
<Hungarian>Kérések elutasítása</Hungarian>
<Portuguese>Rejeitar pedido</Portuguese>
<Italian>Rifiuta la richiesta</Italian>
<Japanese>要求を拒否</Japanese>
<Korean>요청 거부</Korean>
<Chinese>拒絕請求</Chinese>
<Chinesesimp>拒绝请求</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
<English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
<German>Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. </German>
<Spanish>Acepta peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
<Polish>Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Italian>Accetta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni.</Italian>
<Czech>Přijimutí žádosti poslané jinými hráči. Mohou to být žádosti k použítí/sdílení vybavení nebo k vykonání určité činnosti.</Czech>
<Russian>Принять запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian>
<French>Accepter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French>
<Hungarian>Más játékosok általi kérések elfogadása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre.</Hungarian>
<Portuguese>Aceitar pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
<Japanese>他プレイヤからの要求を許可します。他プレイヤは装備を共有し、使うなど特定の動作を行えます。</Japanese>
<Korean>다른 플레이어가 보내온 요청을 수락합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다.</Korean>
<Chinese>接受由其他玩家送出的請求。包含使用/共享裝備與執行特定動作</Chinese>
<Chinesesimp>接受由其他玩家送出的请求。包含使用/共享装备与执行特定动作。</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
<English>Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
<German>Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. </German>
<Spanish>Rechazar peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones.</Spanish>
<Polish>Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności.</Polish>
<Italian>Rifiuta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni.</Italian>
<Czech>Zamítnutí žádostii poslané jinými hráči. Mohou to být žádosti k použítí/sdílení vybavení nebo k vykonání určité činnosti.</Czech>
<Russian>Отклонить запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian>
<French>Rejeter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French>
<Hungarian>Más játékosok általi kérések elutasítása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre.</Hungarian>
<Portuguese>Rejeita pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
<Japanese>他プレイヤからの要求を拒否します。他プレイヤは装備を共有し、使うなど特定の動作をできません。</Japanese>
<Korean>다른 플레이어가 보내온 요청을 거부합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다.</Korean>
<Chinese>拒絕由其他玩家送出的請求。包含使用/共享裝備與執行特定動作</Chinese>
<Chinesesimp>拒绝由其他玩家送出的请求。包含使用/共享装备与执行特定动作。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBOsAction">
<English>Check PBO Action</English>
<German>PBO Überprüfung</German>

View File

@ -74,7 +74,7 @@ class CfgVehicles {
};
class ACE_ConcertinaWire: ACE_ConcertinaWireNoGeo {
scope = 2;
displayName = $STR_ACE_CONCERTINA_WIRE;
displayName = CSTRING(DisplayName);
model = QPATHTOF(data\ACE_ConcertinaWire.p3d);
EGVAR(logistics_wirecutter,isFence) = 1;
class ACE_Actions {
@ -84,7 +84,7 @@ class CfgVehicles {
condition = "true";
class ACE_Dismount {
selection = "";
displayName = "$STR_ACE_UNROLLWIRE";
displayName = CSTRING(UnrollWire);
distance = 5;
condition = "alive _target";
statement = QUOTE([ARR_2(_target,_player)] call FUNC(dismount));
@ -103,7 +103,7 @@ class CfgVehicles {
};
scope = 2;
displayName = $STR_ACE_CONCERTINA_WIRECOIL;
displayName = CSTRING(Coil_DisplayName);
model = QPATHTOF(data\ACE_ConcertinaWireCoil.p3d);
mapsize = 0.5;
animated = 0;
@ -129,7 +129,7 @@ class CfgVehicles {
condition = "true";
class ACE_Deploy {
selection = "";
displayName = "$STR_ACE_ROLLWIRE";
displayName = CSTRING(RollWire);
distance = 4;
condition = "true";
//wait a frame to handle "Do When releasing action menu key" option:

View File

@ -77,7 +77,7 @@ GVAR(deployPFH) = [{
} count WIRE_FAST;
}, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler;
[localize "STR_ACE_ROLLWIRE", "", ""] call EFUNC(interaction,showMouseHint);
[localize LSTRING(RollWire), "", ""] call EFUNC(interaction,showMouseHint);
[_unit, "blockThrow", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);

View File

@ -34,7 +34,7 @@ private _delay = [45, 30] select ([_unit] call EFUNC(common,isEngineer) || {[_un
[_wire],
{(_this select 0) call FUNC(dismountSuccess)},
{},
localize "STR_ACE_UNROLLWIRE",
localize LSTRING(UnrollWire),
{true},
["isnotinside"]
] call EFUNC(common,progressBar);

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="concertina_wire">
<Key ID="STR_ACE_CONCERTINA_WIRE">
<Package name="Concertina_Wire">
<Key ID="STR_ACE_Concertina_Wire_DisplayName">
<English>Concertina Wire</English>
<German>NATO-Draht</German>
<Russian>Колючая проволока</Russian>
@ -17,7 +17,7 @@
<Chinese>鐵絲網</Chinese>
<Chinesesimp>铁丝网</Chinesesimp>
</Key>
<Key ID="STR_ACE_CONCERTINA_WIRECOIL">
<Key ID="STR_ACE_Concertina_Wire_Coil_DisplayName">
<English>Concertina Wire Coil</English>
<German>NATO-Draht Rolle</German>
<Russian>Колючая проволока (моток)</Russian>
@ -33,7 +33,7 @@
<Chinese>鐵絲網捲</Chinese>
<Chinesesimp>铁丝网卷</Chinesesimp>
</Key>
<Key ID="STR_ACE_UNROLLWIRE">
<Key ID="STR_ACE_Concertina_Wire_UnrollWire">
<English>Dismount Concertina Wire</English>
<German>NATO-Draht abbauen</German>
<Russian>Демонтировать колючую проволоку</Russian>
@ -49,7 +49,7 @@
<Chinese>卸下鐵絲網</Chinese>
<Chinesesimp>卸下铁丝网</Chinesesimp>
</Key>
<Key ID="STR_ACE_ROLLWIRE">
<Key ID="STR_ACE_Concertina_Wire_RollWire">
<English>Deploy Concertina Wire</English>
<German>NATO-Draht verlegen</German>
<Russian>Монтировать колючую проволоку</Russian>

View File

@ -1,31 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="dragon">
<Key ID="STR_ACE_dragon_dragonNameCarry">
<Package name="Dragon">
<Key ID="STR_ACE_Dragon_dragonNameCarry">
<English>[CSW] M47 Super-Dragon</English>
<Portuguese>[CSW] M47 Super-Dragon</Portuguese>
</Key>
<Key ID="STR_ACE_dragon_dragonName">
<Key ID="STR_ACE_Dragon_dragonName">
<English>M47 Super-Dragon</English>
<Portuguese>M47 Super-Dragon</Portuguese>
</Key>
<Key ID="STR_ACE_dragon_attachSight">
<Key ID="STR_ACE_Dragon_attachSight">
<English>Attach Sight</English>
<Portuguese>Colocar Mira</Portuguese>
</Key>
<Key ID="STR_ACE_dragon_detachSight">
<Key ID="STR_ACE_Dragon_detachSight">
<English>Detach Sight</English>
<Portuguese>Remover Mira</Portuguese>
</Key>
<Key ID="STR_ACE_dragon_sightName">
<Key ID="STR_ACE_Dragon_sightName">
<English>SU-36/P Daysight</English>
<Portuguese>SU-36/P Daysight</Portuguese>
</Key>
<Key ID="STR_ACE_dragon_sightDescription">
<Key ID="STR_ACE_Dragon_sightDescription">
<English>A light, cheap sight used for daytime operations. Contains the guidance computer for the whole system</English>
<Portuguese>Uma mira leve e comum utilizada para operações de dia. Contêm o computador de orientação para todo o sistema.</Portuguese>
</Key>
<Key ID="STR_ACE_dragon_dragonDescription">
<Key ID="STR_ACE_Dragon_dragonDescription">
<English>A Wire-Guided SACLOS missile with a unique flight characteristic</English>
<Portuguese>Um míssil SACLOS, guiado por fio com uma característica única de vôo</Portuguese>
</Key>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="finger">
<Key ID="STR_ACE_finger_DisplayName">
<Package name="Finger">
<Key ID="STR_ACE_Finger_DisplayName">
<English>Pointing</English>
<German>Fingerzeig</German>
<Italian>Puntamento</Italian>
@ -15,7 +15,7 @@
<Portuguese>Apontando</Portuguese>
<Czech>Ukazování </Czech>
</Key>
<Key ID="STR_ACE_finger_indicatorForSelf_name">
<Key ID="STR_ACE_Finger_indicatorForSelf_name">
<English>Show pointing indicator to self</English>
<German>Zeigersymbol einem selbst anzeigen</German>
<Russian>Индикатор пальца для показывающего</Russian>
@ -31,7 +31,7 @@
<Chinesesimp>在自己身边显示指向标记</Chinesesimp>
<Chinese>顯示指向指示器給自己</Chinese>
</Key>
<Key ID="STR_ACE_finger_indicatorForSelf_description">
<Key ID="STR_ACE_Finger_indicatorForSelf_description">
<English>Render the indicator for the pointing player. This option doesn't affect whether the other players would see the indicator</English>
<German>Zeigt das eigene Zeigersymbol an. Diese Einstellung beeinflusst jedoch nicht andere Spieler, welche das Zeigersymbol sehen können.</German>
<Russian>Отображать индикатор указания пальцем для показывающего игрока. Эта настройка не влияет на то, будут ли другие игроки видеть индикатор</Russian>
@ -47,7 +47,7 @@
<Chinesesimp>显示指向标记给玩家自己。此选项设定并不影响其他玩家能否看到指示标记</Chinesesimp>
<Chinese>顯示指向指示器給玩家自己。此選項設定並不影響其他玩家能否看到指示器</Chinese>
</Key>
<Key ID="STR_ACE_finger_indicatorColor_name">
<Key ID="STR_ACE_Finger_indicatorColor_name">
<English>Pointing indicator</English>
<German>Zeigersymbol</German>
<Russian>Индикатор указания пальцем</Russian>
@ -63,7 +63,7 @@
<Chinesesimp>指向标记</Chinesesimp>
<Chinese>指向指示器</Chinese>
</Key>
<Key ID="STR_ACE_finger_indicatorColor_description">
<Key ID="STR_ACE_Finger_indicatorColor_description">
<English>Color of the pointing indicator circle</English>
<German>Farbe des Zeigersymbols</German>
<Russian>Цвет индикатора указания пальцем</Russian>
@ -79,7 +79,7 @@
<Chinesesimp>指向标记颜色</Chinesesimp>
<Chinese>指向指示器顏色</Chinese>
</Key>
<Key ID="STR_ACE_finger_keyComb">
<Key ID="STR_ACE_Finger_keyComb">
<English>Action "point a finger at"</English>
<German>Aktion: "Zeige Finger auf"</German>
<Russian>Действие "показать пальцем на"</Russian>
@ -95,7 +95,7 @@
<Chinesesimp>使"手指指向在"</Chinesesimp>
<Chinese>使"手指指向在"</Chinese>
</Key>
<Key ID="STR_ACE_finger_keyComb_description">
<Key ID="STR_ACE_Finger_keyComb_description">
<English>Points, and shows a virtual marker of where you are looking to nearby units. Can be held down.</English>
<German>Zeigt in der Nähe befindlichen Spielern die eigene Blickrichtung mit Hilfe eines Kreissymbols an.</German>
<French>Montre, et affiche un marqueur virtuel là ou vous regardez aux unités proches. Peut être maintenu.</French>
@ -111,7 +111,7 @@
<Chinesesimp>当按下此按键后,你附近的单位即可看见一个虚拟图示,标明你正在指向的位置。此按键可以被按住来持续显示。</Chinesesimp>
<Chinese>當按下此按鍵後,你附近的單位即可看見一個虛擬圖示,標明你正在指向的位置。此按鍵可以被按住來持續顯示。</Chinese>
</Key>
<Key ID="STR_ACE_finger_moduleSettings_displayName">
<Key ID="STR_ACE_Finger_moduleSettings_displayName">
<English>Pointing Settings</English>
<German>Zeigen Einstellungen</German>
<French>Options de pointage</French>
@ -127,7 +127,7 @@
<Chinesesimp>指向设定</Chinesesimp>
<Chinese>指向設定</Chinese>
</Key>
<Key ID="STR_ACE_finger_enabled_displayName">
<Key ID="STR_ACE_Finger_enabled_displayName">
<English>Pointing Enabled</English>
<German>Zeigen aktiviert</German>
<French>Pointage activé</French>
@ -143,7 +143,7 @@
<Chinesesimp>指向系统启动</Chinesesimp>
<Chinese>指向系統啟動</Chinese>
</Key>
<Key ID="STR_ACE_finger_maxRange_displayName">
<Key ID="STR_ACE_Finger_maxRange_displayName">
<English>Pointing Max Range</English>
<German>Maximale Zeigerreichweite</German>
<French>Distance maximale de pointage</French>
@ -159,7 +159,7 @@
<Chinesesimp>指向标记最大显示距离</Chinesesimp>
<Chinese>指向指示器最大顯示距離</Chinese>
</Key>
<Key ID="STR_ACE_finger_maxRange_description">
<Key ID="STR_ACE_Finger_maxRange_description">
<English>Max range between players to show the pointing indicator [default: 4 meters]</English>
<German>Maximale Reichweite zwischen Spielern, welche das Zeigesymbol des jeweils anderen sehen können. (Standard: 4 Meter).</German>
<French>Distance maximale entre joueurs pour afficher l'indicateur (défaut: 4 mètres)</French>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="gforces">
<Key ID="STR_ACE_gforces_enabledFor_displayName">
<Package name="GForces">
<Key ID="STR_ACE_GForces_enabledFor_displayName">
<English>Gforces Effects</English>
<German>Effekte der G-Kräfte</German>
<Spanish>Efectos Gforces</Spanish>
@ -16,7 +16,7 @@
<Chinesesimp>G力影响</Chinesesimp>
<Chinese>G力影響</Chinese>
</Key>
<Key ID="STR_ACE_gforces_enabledFor_onlyAircraft">
<Key ID="STR_ACE_GForces_enabledFor_onlyAircraft">
<English>Only Aircraft</English>
<German>Nur Luftfahrzeug</German>
<Spanish>Sólo Aeronave</Spanish>
@ -31,7 +31,7 @@
<Chinesesimp>只有战斗机</Chinesesimp>
<Chinese>只有戰鬥機</Chinese>
</Key>
<Key ID="STR_ACE_gforces_statGReduction">
<Key ID="STR_ACE_GForces_statGReduction">
<English>G-force reduction</English>
<German>G-Kräfte Reduzierung</German>
<French>Reduction des Gs</French>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="hitreactions">
<Key ID="STR_ACE_hitreactions_minDamageToTrigger_displayName">
<Package name="HitReactions">
<Key ID="STR_ACE_HitReactions_minDamageToTrigger_displayName">
<English>Min Damage to trigger falling</English>
<Italian>Danno Minimo da caduta</Italian>
<Chinese>觸發倒下前最低需受到多少傷害</Chinese>

View File

@ -73,7 +73,7 @@ class CfgVehicles {
class ReammoBox_F;
class ACE_HuntIR_Box: ReammoBox_F {
model = QPATHTOF(data\ace_huntirbox.p3d);
displayName = $STR_DN_ACE_HUNTIRBOX;
displayName = CSTRING(TransportBox_DisplayName);
class TransportItems {
MACRO_ADDITEM(ACE_HuntIR_monitor,5);
};

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="HuntIR">
<Key ID="STR_DN_ACE_HUNTIRBOX">
<Key ID="STR_ACE_HuntIR_TransportBox_DisplayName">
<English>HuntIR Transport Box</English>
<German>HuntIR Transportkiste</German>
<Spanish>Caja de transporte de HuntIR</Spanish>
@ -17,7 +17,7 @@
<Chinesesimp>高空战术摄像头运输箱</Chinesesimp>
<Chinese>高空戰術成像器運輸箱</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_magazine_displayName">
<Key ID="STR_ACE_HuntIR_magazine_displayName">
<English>HuntIR Round</English>
<German>HuntIR Granate</German>
<Spanish>Proyectil HuntIR</Spanish>
@ -33,7 +33,7 @@
<Chinesesimp>高空战术摄像头弹药</Chinesesimp>
<Chinese>高空戰術成像器彈藥</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_monitor_displayName">
<Key ID="STR_ACE_HuntIR_monitor_displayName">
<English>HuntIR monitor</English>
<German>HuntIR Monitor</German>
<Spanish>Monitor HuntIR</Spanish>
@ -49,7 +49,7 @@
<Chinesesimp>高空战术摄像头显示面板</Chinesesimp>
<Chinese>高空戰術成像器顯示面板</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_activateMonitor">
<Key ID="STR_ACE_HuntIR_activateMonitor">
<English>Activate HuntIR monitor</English>
<German>HuntIR Monitor aktivieren</German>
<Spanish>Activar monitor HuntIR</Spanish>
@ -65,7 +65,7 @@
<Chinesesimp>开启高空战术摄像头显示面板</Chinesesimp>
<Chinese>開啟高空戰術成像器顯示面板</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_CAM">
<Key ID="STR_ACE_HuntIR_CAM">
<English>Camera:</English>
<German>Kamera:</German>
<Spanish>Camara:</Spanish>
@ -81,7 +81,7 @@
<Chinesesimp>摄像头:</Chinesesimp>
<Chinese>攝影機:</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_ALT">
<Key ID="STR_ACE_HuntIR_ALT">
<English>Altitude:</English>
<German>Höhe:</German>
<Spanish>Altitud:</Spanish>
@ -97,7 +97,7 @@
<Chinesesimp>高度:</Chinesesimp>
<Chinese>高度:</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_TIME">
<Key ID="STR_ACE_HuntIR_TIME">
<English>Recording Time:</English>
<German>Aufnahmezeit:</German>
<Spanish>Tiempo de grabación:</Spanish>
@ -113,7 +113,7 @@
<Chinesesimp>记录时间:</Chinesesimp>
<Chinese>記錄時間:</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_ESC">
<Key ID="STR_ACE_HuntIR_ESC">
<English>Press ESC to quit camera</English>
<German>Zum Verlassen ESC drücken</German>
<Spanish>Pulsar ESC para salir de la camara</Spanish>
@ -129,7 +129,7 @@
<Chinesesimp>按下ESC退出摄像头</Chinesesimp>
<Chinese>按下ESC退出攝影機</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP">
<Key ID="STR_ACE_HuntIR_HELP">
<English>Help</English>
<German>Hilfe</German>
<Spanish>Ayuda</Spanish>
@ -145,7 +145,7 @@
<Chinesesimp>帮助</Chinesesimp>
<Chinese>幫助</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_ZOOM">
<Key ID="STR_ACE_HuntIR_HELP_ZOOM">
<English>A/D - Cycle zoom</English>
<German>A/D - Zoom</German>
<Spanish>A/D - Cambiar zoom</Spanish>
@ -161,7 +161,7 @@
<Chinesesimp>A/D - 切换放大倍率</Chinesesimp>
<Chinese>A/D - 切換放大倍率</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_CAM">
<Key ID="STR_ACE_HuntIR_HELP_CAM">
<English>W/S - Select camera</English>
<German>W/S - Wähle Kamera</German>
<Spanish>W/S - Seleccionar camara</Spanish>
@ -177,7 +177,7 @@
<Chinesesimp>W/S - 切换摄像头</Chinesesimp>
<Chinese>W/S - 切換攝影機</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_ROT">
<Key ID="STR_ACE_HuntIR_HELP_ROT">
<English>Left/Right - Rotate camera</English>
<German>Links/Rechts - Rotiere Kamera</German>
<Spanish>Left/Right - Rotar camara</Spanish>
@ -193,7 +193,7 @@
<Chinesesimp>左/右 - 旋转摄像头</Chinesesimp>
<Chinese>左/右 - 旋轉攝影機</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_ELV">
<Key ID="STR_ACE_HuntIR_HELP_ELV">
<English>Up/Down - Elevate/lower camera</English>
<German>Hoch/Runter - Neige Kamera</German>
<Spanish>Up/Down - Subir/bajar camara</Spanish>
@ -209,7 +209,7 @@
<Chinesesimp>上/下 - 上升/下降摄像头</Chinesesimp>
<Chinese>上/下 - 上升/下降攝影機</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_MOD">
<Key ID="STR_ACE_HuntIR_HELP_MOD">
<English>N - Cycle IT modes</English>
<German>N - Sichtmodi</German>
<Spanish>N - Cambiar modos de IT</Spanish>
@ -225,7 +225,7 @@
<Chinesesimp>N - 切换热显模式</Chinesesimp>
<Chinese>N - 切換熱顯模式</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_RES">
<Key ID="STR_ACE_HuntIR_HELP_RES">
<English>R - Reset camera</English>
<German>R - Kamera zurücksetzen</German>
<Spanish>R - Reiniciar camara</Spanish>
@ -241,7 +241,7 @@
<Chinesesimp>R - 重置摄像头</Chinesesimp>
<Chinese>R - 重置攝影機</Chinese>
</Key>
<Key ID="STR_ACE_HUNTIR_HELP_EXIT">
<Key ID="STR_ACE_HuntIR_HELP_EXIT">
<English>Esc - Exit help</English>
<German>ESC - Hilfe verlassen</German>
<Spanish>Esc - Salit de ayuda</Spanish>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="map_gestures">
<Key ID="STR_ACE_map_gestures_moduleSettings_displayName">
<Package name="Map_Gestures">
<Key ID="STR_ACE_Map_Gestures_moduleSettings_displayName">
<English>Map Gestures</English>
<Portuguese>Gestos no mapa</Portuguese>
<Polish>Gesty na mapie</Polish>
@ -16,7 +16,7 @@
<Chinesesimp>地图标识器</Chinesesimp>
<Chinese>地圖指示器</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_enabled_displayName">
<Key ID="STR_ACE_Map_Gestures_enabled_displayName">
<English>Enabled</English>
<Portuguese>Ativado</Portuguese>
<Polish>Aktywne</Polish>
@ -31,7 +31,7 @@
<Chinesesimp>启用</Chinesesimp>
<Chinese>啟用</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_maxRange_displayName">
<Key ID="STR_ACE_Map_Gestures_maxRange_displayName">
<English>Map Gesture Max Range</English>
<Portuguese>Distância para gestos no mapa</Portuguese>
<Polish>Maks. zasięg gestów</Polish>
@ -46,7 +46,7 @@
<Chinesesimp>地图标识器最大范围</Chinesesimp>
<Chinese>地圖指示器最大範圍</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_maxRange_description">
<Key ID="STR_ACE_Map_Gestures_maxRange_description">
<English>Max range between players to show the map gesture indicator [default: 7 meters]</English>
<Portuguese>Distância max. entre os jogadores para mostrar o indicador de gesto no mapa [padrão: 7 metros]</Portuguese>
<Polish>Maksymalny zasięg, w obrębie którego gesty będą widoczne dla graczy [domyślnie: 7 metrów]</Polish>
@ -61,7 +61,7 @@
<Chinesesimp>设定地图标识器显示的最大范围距离 [预设: 7公尺]</Chinesesimp>
<Chinese>設定地圖指示器顯示的最大範圍距離 [預設: 7公尺]</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_defaultLeadColor_displayName">
<Key ID="STR_ACE_Map_Gestures_defaultLeadColor_displayName">
<English>Lead Default Color</English>
<Portuguese>Cor padrão para o líder</Portuguese>
<Polish>Domyślny kolor lidera</Polish>
@ -76,7 +76,7 @@
<Chinesesimp>队长预设颜色</Chinesesimp>
<Chinese>隊長預設顏色</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_defaultLeadColor_description">
<Key ID="STR_ACE_Map_Gestures_defaultLeadColor_description">
<English>Fallback Color value for group leaders when there is no group setting. [Module: leave blank to not force on clients]</English>
<Portuguese>Valor de cor alternativa para líderes de grupo</Portuguese>
<Polish>Domyślny kolor dla liderów grup.</Polish>
@ -90,7 +90,7 @@
<Chinesesimp>当没有设定小队颜色时,此功能会定义队长的标识器颜色。[模块: 此栏留空来保持预设颜色]</Chinesesimp>
<Chinese>當沒有設定小隊顏色時,此功能會定義隊長的指示器顏色。[模塊: 此欄留空來保持預設顏色]</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_defaultColor_displayName">
<Key ID="STR_ACE_Map_Gestures_defaultColor_displayName">
<English>Default Color</English>
<Portuguese>Cor padrão</Portuguese>
<Polish>Kolor domyślny</Polish>
@ -105,7 +105,7 @@
<Chinesesimp>预设颜色</Chinesesimp>
<Chinese>預設顏色</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_defaultColor_description">
<Key ID="STR_ACE_Map_Gestures_defaultColor_description">
<English>Fallback Color value when there is no group setting. [Module: leave blank to not force on clients]</English>
<Portuguese>Valor alternativo de cor</Portuguese>
<Polish>Kolor domyślny</Polish>
@ -119,7 +119,7 @@
<Chinesesimp>当没有设定小队颜色时,此功能会定义玩家的标识器颜色。[模块: 此栏留空来保持预设颜色]</Chinesesimp>
<Chinese>當沒有設定小隊顏色時,此功能會定義玩家的指示器顏色。[模塊: 此欄留空來保持預設顏色]</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_leadColor_displayName">
<Key ID="STR_ACE_Map_Gestures_leadColor_displayName">
<English>Lead Color</English>
<Portuguese>Cor do líder</Portuguese>
<Polish>Kolor lidera</Polish>
@ -134,7 +134,7 @@
<Chinesesimp>队长颜色</Chinesesimp>
<Chinese>隊長顏色</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_leadColor_description">
<Key ID="STR_ACE_Map_Gestures_leadColor_description">
<English>Color value for group leaders of groups synced with this module.</English>
<Portuguese>Valor de cor para líderes de grupo sincronizados com este módulo.</Portuguese>
<Polish>Kolor dla liderów grup zsynchronizowanych z tym modułem.</Polish>
@ -148,7 +148,7 @@
<Chinesesimp>改变与此同步小队队长的标识器颜色。</Chinesesimp>
<Chinese>改變與此同步小隊隊長的指示器顏色</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_color_displayName">
<Key ID="STR_ACE_Map_Gestures_color_displayName">
<English>Color</English>
<Portuguese>Cor</Portuguese>
<Polish>Kolor</Polish>
@ -163,7 +163,7 @@
<Chinesesimp>颜色</Chinesesimp>
<Chinese>顏色</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_color_description">
<Key ID="STR_ACE_Map_Gestures_color_description">
<English>Color value for group members of groups synced with this module.</English>
<Portuguese>Valor de cor para membros de grupo sincronizados com este módulo.</Portuguese>
<Polish>Kolor dla członków grup zsynchronizowanych z tym modułem.</Polish>
@ -177,7 +177,7 @@
<Chinesesimp>改变与此同步小队队员的标识器颜色</Chinesesimp>
<Chinese>改變與此同步小隊隊員的指示器顏色</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_moduleGroupSettings_displayName">
<Key ID="STR_ACE_Map_Gestures_moduleGroupSettings_displayName">
<English>Map Gestures - Group Settings</English>
<Portuguese>Gestos no mapa - Definições de Grupo</Portuguese>
<Polish>Gesty na mapie - ustawienia grup</Polish>
@ -192,7 +192,7 @@
<Chinesesimp>地图标识器 - 队伍设定</Chinesesimp>
<Chinese>地圖指示器 - 隊伍設定</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_interval_displayName">
<Key ID="STR_ACE_Map_Gestures_interval_displayName">
<English>Update Interval</English>
<Portuguese>Intervalo de atualizações</Portuguese>
<Polish>Interwał aktualizacji</Polish>
@ -207,7 +207,7 @@
<Chinesesimp>更新间隔</Chinesesimp>
<Chinese>更新間隔</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_interval_description">
<Key ID="STR_ACE_Map_Gestures_interval_description">
<English>Time between data updates.</English>
<Portuguese>Tempo entre atualização de dados</Portuguese>
<Polish>Odstęp pomiędzy aktualizacjami danych</Polish>
@ -222,7 +222,7 @@
<Chinesesimp>定义每次更新数据的时间.</Chinesesimp>
<Chinese>定義每次更新數據的時間</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_enabled_description">
<Key ID="STR_ACE_Map_Gestures_enabled_description">
<English>Enables the Map Gestures.</English>
<Portuguese>Ativa os gestos no mapa</Portuguese>
<Polish>Aktywuje gesty na mapie.</Polish>
@ -237,7 +237,7 @@
<Chinesesimp>启用地图标识器</Chinesesimp>
<Chinese>啟用地圖指示器</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_nameTextColor_displayName">
<Key ID="STR_ACE_Map_Gestures_nameTextColor_displayName">
<English>Name Text Color</English>
<Portuguese>Cor do texto do nome</Portuguese>
<Polish>Kolor nazw</Polish>
@ -252,7 +252,7 @@
<Chinesesimp>名称文字颜色</Chinesesimp>
<Chinese>名稱文字顏色</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_nameTextColor_description">
<Key ID="STR_ACE_Map_Gestures_nameTextColor_description">
<English>Color of the name tag text besides the map gestures mark.</English>
<Portuguese>Cor do texto da etiqueta de nome que fica embaixo da marcação de gestos no mapa.</Portuguese>
<Polish>Kolor nazwy gracza obok markera gestu mapy.</Polish>
@ -266,7 +266,7 @@
<Chinesesimp>定义名称文字颜色。使其与地图标识器颜色有所区别。</Chinesesimp>
<Chinese>定義名稱文字顏色。使其與地圖指示器顏色有所區別</Chinese>
</Key>
<Key ID="STR_ACE_map_gestures_mapGestures_category">
<Key ID="STR_ACE_Map_Gestures_mapGestures_category">
<English>Map Gestures</English>
<Portuguese>Gestos no mapa</Portuguese>
<Polish>Gesty na mapie</Polish>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ace_Maverick">
<Package name="main">
<Project name="ACE">
<Package name="Maverick">
<Container name="magazines">
<Key ID="str_ace_maverick_l_mag_descr">
<Key ID="STR_ACE_Maverick_l_mag_descr">
<English>AGM-65 Maverick L, Laser Guided Anti-Ground-Missile</English>
<German>AGM-65 Maverick L, lasergelenkte Luft-Boden-Rakete</German>
<Italian>AGM-65 Maverick L, Guida Laser Missile Anti-Terra</Italian>
@ -14,7 +14,7 @@
<Russian>AGM-65 Maverick L, ракета Воздух-Земля с лазерным наведением</Russian>
<Portuguese>AGM-65 Maverick L, Míssil Anti Chão Guiado a Laser</Portuguese>
</Key>
<Key ID="str_ace_maverick_l_mag_x1">
<Key ID="STR_ACE_Maverick_l_mag_x1">
<English>AGM-65 Maverick L [ACE]</English>
<German>AGM-65 Maverick L [ACE]</German>
<Italian>AGM-65 Maverick L [ACE]</Italian>
@ -26,7 +26,7 @@
<Russian>AGM-65 Maverick L [ACE]</Russian>
<Portuguese>AGM-65 Maverick L [ACE]</Portuguese>
</Key>
<Key ID="str_ace_maverick_l_mag_x2">
<Key ID="STR_ACE_Maverick_l_mag_x2">
<English>2x AGM-65 Maverick L [ACE]</English>
<German>2x AGM-65 Maverick L [ACE]</German>
<Italian>2x AGM-65 Maverick L [ACE]</Italian>
@ -38,7 +38,7 @@
<Russian>2x AGM-65 Maverick L [ACE]</Russian>
<Portuguese>2x AGM-65 Maverick L [ACE]</Portuguese>
</Key>
<Key ID="str_ace_maverick_l_mag_x3">
<Key ID="STR_ACE_Maverick_l_mag_x3">
<English>3x AGM-65 Maverick L [ACE]</English>
<German>3x AGM-65 Maverick L [ACE]</German>
<Italian>3x AGM-65 Maverick L [ACE]</Italian>
@ -50,7 +50,7 @@
<Russian>3x AGM-65 Maverick L [ACE]</Russian>
<Portuguese>3x AGM-65 Maverick L [ACE]</Portuguese>
</Key>
<Key ID="str_ace_maverick_l_mag_short">
<Key ID="STR_ACE_Maverick_l_mag_short">
<English>Laser Guided</English>
<German>Lasergelenkt</German>
<Italian>Guida Laser</Italian>
@ -62,7 +62,7 @@
<Russian>С лазерным наведением</Russian>
<Portuguese>Guiado a laser</Portuguese>
</Key>
<Key ID="str_ace_maverick_kh25ml_mag_descr">
<Key ID="STR_ACE_Maverick_kh25ml_mag_descr">
<English>Kh-25ML, Laser Guided Air-to-Ground-Missile</English>
<German>Ch-25ML, Lasergelenkte Luft-Boden-Rakete</German>
<Korean>Kh-25ML, 레이저 유도 대공 미사일</Korean>
@ -74,7 +74,7 @@
<Russian>Х-25МЛ, ракета Воздух-Земля с лазерным наведением</Russian>
<Portuguese>Kh-25ML, Míssil Ar para Chão Guiado a Laser</Portuguese>
</Key>
<Key ID="str_ace_maverick_kh25ml_mag_x1">
<Key ID="STR_ACE_Maverick_kh25ml_mag_x1">
<English>1x Kh-25ML [ACE]</English>
<German>1x Ch-25ML [ACE]</German>
<Russian>1x Х-25МЛ [ACE]</Russian>
@ -88,7 +88,7 @@
</Key>
</Container>
<Container name="weapons">
<Key ID="str_ace_maverick_l">
<Key ID="STR_ACE_Maverick_l">
<English>AGM-65 Maverick L</English>
<German>AGM-65 Maverick L</German>
<Italian>AGM-65 Maverick L</Italian>
@ -100,7 +100,7 @@
<Russian>AGM-65 Maverick L</Russian>
<Portuguese>AGM-65 Maverick L</Portuguese>
</Key>
<Key ID="str_ace_maverick_kh25ml">
<Key ID="STR_ACE_Maverick_kh25ml">
<English>Kh-25ML</English>
<German>Ch-25ML</German>
<Russian>Х-25МЛ</Russian>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="medical_ai">
<Key ID="STR_ACE_medical_ai_enableFor_title">
<Package name="Medical_AI">
<Key ID="STR_ACE_Medical_AI_enableFor_title">
<English>Medic AI</English>
<German>Sanitäts KI</German>
<Japanese>AI 衛生兵</Japanese>
@ -9,7 +9,7 @@
<French>Médecine IA</French>
<Portuguese>IA Médico</Portuguese>
</Key>
<Key ID="STR_ACE_medical_ai_enableFor_desc">
<Key ID="STR_ACE_Medical_AI_enableFor_desc">
<English>AI will respond to injury and unconsciousness</English>
<German>KI reagiert auf Verletzungen und Bewusstlosigkeit</German>
<Japanese>AI が負傷者と気絶している人に対して行動するようになります。</Japanese>
@ -17,7 +17,7 @@
<French>Les unités IA seront sensibles aux blessures, ainsi qu'à la perte de connaissance.</French>
<Portuguese>A IA irá responder a ferimentos e perdas de consciência</Portuguese>
</Key>
<Key ID="STR_ACE_medical_ai_enabledFor_OnlyServerAndHC">
<Key ID="STR_ACE_Medical_AI_enabledFor_OnlyServerAndHC">
<English>Only Server and HC</English>
<German>Nur Server und HC</German>
<Spanish>Sólo Server y HC</Spanish>

View File

@ -66,7 +66,7 @@
<English>Only high pain effect</English>
</Key>
<Container name="Settings">
<Key ID="STR_ACE_Medical_feedback_enableScreams_DisplayName">
<Key ID="STR_ACE_Medical_Feedback_enableScreams_DisplayName">
<English>Enable Screams</English>
<Russian>Включить крики</Russian>
<Polish>Aktywuj wrzaski</Polish>
@ -82,7 +82,7 @@
<Chinesesimp>启用尖叫</Chinesesimp>
<Chinese>啟用尖叫</Chinese>
</Key>
<Key ID="STR_ACE_Medical_feedback_enableScreams_Description">
<Key ID="STR_ACE_Medical_Feedback_enableScreams_Description">
<English>Enable screaming by injured units</English>
<Russian>Включить крики раненных бойцов</Russian>
<Polish>Aktywuj wrzeszczenie z bólu przez ranne jednostki</Polish>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Medical GUI">
<Package name="Medical_GUI">
<Key ID="STR_ACE_Medical_GUI_SubCategory">
<English>GUI</English>
<Japanese>GUI</Japanese>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="noradio">
<Key ID="STR_ACE_noradio_setting">
<Package name="NoRadio">
<Key ID="STR_ACE_NoRadio_setting">
<English>Mute Player</English>
<German>Spieler stummschalten</German>
<Italian>Muta Giocatore</Italian>
@ -12,7 +12,7 @@
<Russian>Заглушить игрока</Russian>
<Portuguese>Silenciar Jogador</Portuguese>
</Key>
<Key ID="STR_ACE_noradio_setting_tooltip">
<Key ID="STR_ACE_NoRadio_setting_tooltip">
<English>Mutes the controlled player avatar.</English>
<German>Schaltet eigenen Spieleravatar stumm.</German>
<Italian>Muta l'avatar del giocatore controllato.</Italian>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="overpressure">
<Key ID="STR_ACE_overpressure_distanceCoefficient_displayName">
<Package name="Overpressure">
<Key ID="STR_ACE_Overpressure_distanceCoefficient_displayName">
<English>Overpressure Distance Coefficient</English>
<German>Überdruckentfernungskoeffizient</German>
<Japanese>過圧の距離係数</Japanese>
@ -14,7 +14,7 @@
<Russian>Коэффициент избыточного давления</Russian>
<Portuguese>Coeficiente de Distância de Sobrepressão</Portuguese>
</Key>
<Key ID="STR_ACE_overpressure_distanceCoefficient_toolTip">
<Key ID="STR_ACE_Overpressure_distanceCoefficient_toolTip">
<English>Scales the overpressure effect [Default: 1]</English>
<German>Stellt den Koeffizient für die Überdruckentfernung ein [Standard: 1]</German>
<Japanese>過圧効果の範囲 [標準: 1]</Japanese>
@ -27,7 +27,7 @@
<Russian>Степень зависимости избыточного давления от расстояния [По умолчанию: 1]</Russian>
<Portuguese>Escala o efeito de sobrepressão [Padrão: 1]</Portuguese>
</Key>
<Key ID="STR_ACE_overpressure_statBackblastRange">
<Key ID="STR_ACE_Overpressure_statBackblastRange">
<English>Backblast range</English>
<German>Rückstoßbereich</German>
<Japanese>後方噴射の範囲</Japanese>
@ -38,7 +38,7 @@
<Russian>Дальность реактивной струи</Russian>
<Portuguese>Alcance do Sopro de Disparo</Portuguese>
</Key>
<Key ID="STR_ACE_overpressure_statBackblastAngle">
<Key ID="STR_ACE_Overpressure_statBackblastAngle">
<English>Backblast angle</English>
<German>Rückstoßwinkel</German>
<Japanese>後方噴射の角度</Japanese>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="repair">
<Package name="Repair">
<Key ID="STR_ACE_Repair_SpareTrack">
<English>Spare Track</English>
<German>Ersatzkette</German>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="sandbag">
<Package name="Sandbag">
<Key ID="STR_ACE_Sandbag_sandbag_displayName">
<English>Sandbag</English>
<German>Sandsack</German>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="tripod">
<Package name="SpottingScope">
<Key ID="STR_ACE_SpottingScope_DisplayName">
<English>Spotting Scope</English>
<German>Teleskop</German>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="tacticalladder">
<Package name="TacticalLadder">
<Key ID="STR_ACE_TacticalLadder_DisplayName">
<English>Telescopic Ladder</English>
<German>Teleskopleiter</German>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="trenches">
<Package name="Trenches">
<Key ID="STR_ACE_Trenches_EntrenchingToolName">
<English>Entrenching Tool</English>
<German>Klappspaten</German>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="tripod">
<Package name="Tripod">
<Key ID="STR_ACE_Tripod_DisplayName">
<English>SSWT Kit</English>
<German>Scharfschützendreibein</German>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="MX2A">
<Package name="Yardage450">
<Key ID="STR_ACE_Yardage450_DisplayName">
<English>Yardage 450</English>
<Polish>Yardage 450</Polish>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE_tracer">
<Package name="main">
<Project name="ACE">
<Package name="Tracers">
<Container name="magazines">
<Key ID="STR_ACE_Tracers_150Rnd_556x45_Drum_green">
<English>5.56 mm 150Rnd Reload Tracer (Green) Mag</English>

View File

@ -0,0 +1,157 @@
#!/usr/bin/env python3
import fnmatch
import os
import sys
import xml.etree.ElementTree as ET
# STRINGTABLE VALIDATOR
# Author: mharis001
# ---------------------
# Verifies all stringtable.xml files in the project. Checks for:
# - proper XML tree structure.
# - English as first translation.
# - no Original translation.
# - duplicated entries and languages.
######## GLOBALS #########
PROJECT_NAME = "ACE"
##########################
def check_stringtable(filepath):
try:
tree = ET.parse(filepath)
except:
print(" ERROR: Failed to parse file.")
return 1
errors = 0
# Verify that the root tag is Project and its name attribute is the project name
root = tree.getroot()
if root.tag != "Project":
print(" ERROR: Invalid root tag '{}' found, must be 'Project'.".format(root.tag))
errors += 1
if root.get("name") != PROJECT_NAME:
print(" ERROR: Invalid name attribute '{}' for Project tag, must be '{}'.".format(root.get("name"), PROJECT_NAME))
errors += 1
# Verify that the root has a Package tag and its name attribute matches the component's folder name
package = root.find("Package")
if package is None:
print(" ERROR: Failed to find 'Package' tag under 'Project' tag.")
errors += 1
else:
package_name = package.get("name")
if package_name.islower():
print(" ERROR: Package name attribute '{}' is all lowercase, should be in titlecase.".format(package_name))
errors += 1
if package_name.lower() != os.path.basename(os.path.dirname(filepath)):
print(" ERROR: Package name attribute '{}' does not match the component folder name.".format(package_name))
errors += 1
# Get all keys contained in the stringtable
keys = package.findall("Key")
for container in package.findall("Container"):
keys.extend(container.findall("Key"))
key_ids = []
key_prefix = "STR_{}_{}_".format(PROJECT_NAME, package_name)
for key in keys:
key_id = key.get("ID")
# Verify that the key has a valid ID attribute
if key_id is None:
print(" ERROR: Key '{}' had no ID attribute.".format(key_id))
errors += 1
elif key_id.find(key_prefix) != 0:
print(" ERROR: Key '{}' does not have a valid ID attribute, should be in format {}{{name}}.".format(key_id, key_prefix))
errors += 1
key_ids.append(key_id)
# Verify language entries for the key, check that the key:
# - contains at least one translation
# - does not contain an Original translation
# - has English as the first listed translation
# - has only one entry for each language
entries = list(key)
if len(entries) == 0:
print(" ERROR: Key '{}' has no translation entries.".format(key_id))
errors += 1
else:
if not key.find("Original") is None:
print(" ERROR: Key '{}' has an Original translation, unnecessary with English as first.".format(key_id))
errors += 1
if entries[0].tag != "English":
print(" ERROR: Key '{}' does not have its English translation listed first.".format(key_id))
errors += 1
languages = list(map(lambda l: l.tag, entries))
for language in set(languages):
count = languages.count(language)
if count > 1:
print(" ERROR: Key '{}' has {} {} translations.".format(key_id, count, language))
errors += 1
# Verify that key IDs are unique
for id in set(key_ids):
count = key_ids.count(id)
if count > 1:
print(" ERROR: Key '{}' is duplicated {} time(s).".format(id, count))
errors += 1
if errors == 0:
print("No errors found.")
else:
print("Found {} error(s).".format(errors))
return errors
def main():
print("Validating Stringtables")
print("-----------------------")
# Allow running from root directory and tools directory
root_dir = ".."
if os.path.exists("addons"):
root_dir = "."
# Check all stringtable.xml files in the project directory
bad_count = 0
for root, _, files in os.walk(root_dir):
for file in fnmatch.filter(files, "stringtable.xml"):
filepath = os.path.join(root, file)
print("\nChecking {}:".format(os.path.relpath(filepath, root_dir)))
bad_count += check_stringtable(filepath)
print()
if bad_count == 0:
print("Stringtable Validation PASSED")
else:
print("Stringtable Validation FAILED")
return bad_count
if __name__ == '__main__':
sys.exit(main())