diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index eef7cae..759d9ee 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -24,7 +24,7 @@ jobs:
- name: Build
run: dotnet build --no-restore --configuration Release --nologo
- name: Run tests
- run: dotnet test --no-build --configuration Release --nologo
+ run: dotnet test --filter FullyQualifiedName\!~EasyTranslate.Integration.Tests --no-build --configuration Release --nologo
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4
with:
diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml
index 9b6e415..0fc61cb 100644
--- a/.github/workflows/check-format.yml
+++ b/.github/workflows/check-format.yml
@@ -14,5 +14,7 @@ jobs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.x.x
+ - name: Restore dependencies
+ run: dotnet restore
- name: Run dotnet format
- run: dotnet format --verify-no-changes
+ run: dotnet format --no-restore --verify-no-changes
diff --git a/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj b/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj
index 9e7ece7..16dcb19 100644
--- a/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj
+++ b/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj
@@ -15,6 +15,7 @@
net8.0-windows
en
12
+ enable
diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs
index cbfe432..00d359f 100644
--- a/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs
+++ b/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs
@@ -23,7 +23,7 @@ ActionLite japanese
english.Name.RawString,
french.Name.RawString,
german.Name.RawString,
- german.Name.RawString
+ japanese.Name.RawString
);
}
}
diff --git a/EasyTranslate.Integration.Tests/EasyTranslate.Integration.Tests.csproj b/EasyTranslate.Integration.Tests/EasyTranslate.Integration.Tests.csproj
new file mode 100644
index 0000000..8bd6ec3
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/EasyTranslate.Integration.Tests.csproj
@@ -0,0 +1,33 @@
+
+
+
+ net8.0
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(DalamudLibPath)\Lumina.dll
+ true
+
+
+ $(DalamudLibPath)\Lumina.Excel.dll
+ true
+
+
+
diff --git a/EasyTranslate.Integration.Tests/README.md b/EasyTranslate.Integration.Tests/README.md
new file mode 100644
index 0000000..36cbf06
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/README.md
@@ -0,0 +1,7 @@
+# EasyTranslate Integration Tests
+
+These tests require FFXIV to be installed in order to run.
+They assume that the GAME_DATA_PATH environment variable is set to the game/sqpack folder of the game files.
+Ex: `C:\Program Files (x86)\SquareEnix\FINAL FANTASY XIV- A Realm Reborn\game\sqpack`
+
+**WARNING**: Since these tests rely on the game's data, they have the potential to fail after any game update!
diff --git a/EasyTranslate.Integration.Tests/SearchContentByNameTest.cs b/EasyTranslate.Integration.Tests/SearchContentByNameTest.cs
new file mode 100644
index 0000000..a5f5265
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/SearchContentByNameTest.cs
@@ -0,0 +1,235 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Threading.Tasks;
+using EasyTranslate.Domain.Entities;
+using EasyTranslate.UseCase;
+using Microsoft.Extensions.DependencyInjection;
+using Snapshooter.Xunit;
+using Xunit;
+
+namespace EasyTranslate.Integration.Tests;
+
+// Assertions are done with snapshots
+[SuppressMessage("Blocker Code Smell", "S2699:Tests should include assertions")]
+public class SearchContentByNameTest
+{
+ private readonly SearchContentByNameUseCase _searchContentByNameUseCase;
+
+ public SearchContentByNameTest()
+ {
+ IServiceProvider serviceProvider = ServiceProviderBuilder.Build();
+ _searchContentByNameUseCase = serviceProvider.GetService()!;
+ }
+
+ [Fact]
+ public async Task Item_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Popoto",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Action_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "cure",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+
+ [Fact]
+ public async Task Achievement_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "For the hoard",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task BNpcname_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "bhoot",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Companion_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "lesser panda",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task ContentFinderCondition_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "sastasha",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task CraftAction_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Groundwork",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Emote_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "pet",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task ENpcResident_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "G'raha Tia",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Fate_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Drink Me",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Leve_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Practical Command",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Mount_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Demi-Ozma",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Orchestrion_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "pa-paya",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task PlaceName_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Limsa Lominsa",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Quest_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "For Want Of a Memory",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Status_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Vulnerability Up",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Title_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Goddess of Magic",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Trait_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Maim and Mend",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+
+ [Fact]
+ public async Task Weather_SearchContentByName_ReturnsMatchingResults()
+ {
+ IEnumerable results = await _searchContentByNameUseCase.Execute(
+ "Fair Skies",
+ Language.English
+ );
+
+ Snapshot.Match(results.ToList());
+ }
+}
diff --git a/EasyTranslate.Integration.Tests/ServiceProviderBuilder.cs b/EasyTranslate.Integration.Tests/ServiceProviderBuilder.cs
new file mode 100644
index 0000000..0140e21
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/ServiceProviderBuilder.cs
@@ -0,0 +1,40 @@
+using System;
+using EasyTranslate.Infrastructure.Configuration;
+using EasyTranslate.UseCase.Configuration;
+using Lumina;
+using Lumina.Excel;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace EasyTranslate.Integration.Tests;
+
+public static class ServiceProviderBuilder
+{
+ private static ServiceProvider? s_serviceProvider;
+ private static readonly object s_lock = new();
+
+ public static IServiceProvider Build()
+ {
+ if (s_serviceProvider is not null)
+ {
+ return s_serviceProvider;
+ }
+
+ lock (s_lock)
+ {
+ string? gameDataPath = Environment.GetEnvironmentVariable("GAME_DATA_PATH");
+ if (gameDataPath is null)
+ {
+ throw new InvalidOperationException(
+ "Please set the GAME_DATA_PATH environment variable as described in the README.md file");
+ }
+
+ s_serviceProvider = new ServiceCollection()
+ .AddUseCaseServices()
+ .AddInfrastructureServices()
+ .AddSingleton(_ => new GameData(gameDataPath).Excel)
+ .BuildServiceProvider();
+ }
+
+ return s_serviceProvider;
+ }
+}
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Achievement_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Achievement_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..4e8081d
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Achievement_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,50 @@
+[
+ {
+ "Type": "Achievement",
+ "IconId": 60035,
+ "EnglishName": "For the Hoard I",
+ "FrenchName": "Exhumation profonde I",
+ "GermanName": "Mein Schatz I",
+ "JapaneseName": "埋もれた財宝:ランク1"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 60035,
+ "EnglishName": "For the Hoard V",
+ "FrenchName": "Exhumation profonde V",
+ "GermanName": "Mein Schatz V",
+ "JapaneseName": "埋もれた財宝:ランク5"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 60035,
+ "EnglishName": "For the Hoard II",
+ "FrenchName": "Exhumation profonde II",
+ "GermanName": "Mein Schatz II",
+ "JapaneseName": "埋もれた財宝:ランク2"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 60035,
+ "EnglishName": "For the Hoard IV",
+ "FrenchName": "Exhumation profonde IV",
+ "GermanName": "Mein Schatz IV",
+ "JapaneseName": "埋もれた財宝:ランク4"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 60035,
+ "EnglishName": "For the Hoard VI",
+ "FrenchName": "Exhumation profonde VI",
+ "GermanName": "Mein Schatz VI",
+ "JapaneseName": "埋もれた財宝:ランク6"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 60035,
+ "EnglishName": "For the Hoard III",
+ "FrenchName": "Exhumation profonde III",
+ "GermanName": "Mein Schatz III",
+ "JapaneseName": "埋もれた財宝:ランク3"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Action_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Action_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..8ca75be
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Action_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,522 @@
+[
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Cure",
+ "FrenchName": "Soin",
+ "GermanName": "Vita",
+ "JapaneseName": "ケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 784,
+ "EnglishName": "Cure",
+ "FrenchName": "Soin",
+ "GermanName": "Vita",
+ "JapaneseName": "ケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Cure V",
+ "FrenchName": "Téra Soin",
+ "GermanName": "Vigra",
+ "JapaneseName": "ケアルダ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64629,
+ "EnglishName": "Cure L",
+ "FrenchName": "Évocation Logos : Soin",
+ "GermanName": "Logos-Vita",
+ "JapaneseName": "ロゴス・ケアル"
+ },
+ {
+ "Type": "Item",
+ "IconId": 27953,
+ "EnglishName": "Cure L",
+ "FrenchName": "Évocation Logos: Soin",
+ "GermanName": "Logos-Splitter des Vita",
+ "JapaneseName": "ロゴス・ケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 406,
+ "EnglishName": "Cure II",
+ "FrenchName": "Extra Soin",
+ "GermanName": "Vitra",
+ "JapaneseName": "ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Cure IV",
+ "FrenchName": "Giga Soin",
+ "GermanName": "Vitaka",
+ "JapaneseName": "ケアルジャ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Cure II",
+ "FrenchName": "Extra Soin",
+ "GermanName": "Vitra",
+ "JapaneseName": "ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 3216,
+ "EnglishName": "Vercure",
+ "FrenchName": "VerSoin",
+ "GermanName": "Erzvita",
+ "JapaneseName": "ヴァルケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Vercure",
+ "FrenchName": "VerSoin",
+ "GermanName": "Erzvita",
+ "JapaneseName": "ヴァルケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 784,
+ "EnglishName": "Cure II",
+ "FrenchName": "Extra Soin",
+ "GermanName": "Vitra",
+ "JapaneseName": "ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 784,
+ "EnglishName": "Vercure",
+ "FrenchName": "VerSoin",
+ "GermanName": "Erzvita",
+ "JapaneseName": "ヴァルケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64868,
+ "EnglishName": "Vercure",
+ "FrenchName": "VerSoin",
+ "GermanName": "Erzvita",
+ "JapaneseName": "ヴァルケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64816,
+ "EnglishName": "Cure II",
+ "FrenchName": "Extra Soin",
+ "GermanName": "Vitra",
+ "JapaneseName": "ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 9274,
+ "EnglishName": "Cure II",
+ "FrenchName": "Extra Soin",
+ "GermanName": "Vitra",
+ "JapaneseName": "ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 407,
+ "EnglishName": "Cure III",
+ "FrenchName": "Méga Soin",
+ "GermanName": "Vitaga",
+ "JapaneseName": "ケアルガ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Pom Cure",
+ "FrenchName": "Pompon soignant",
+ "GermanName": "Vitakupo",
+ "JapaneseName": "ポンポンケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Cure III",
+ "FrenchName": "Méga Soin",
+ "GermanName": "Vitaga",
+ "JapaneseName": "ケアルガ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 3308,
+ "EnglishName": "Pom Cure",
+ "FrenchName": "Pompon soignant",
+ "GermanName": "Vitakupo",
+ "JapaneseName": "ポンポンケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 9606,
+ "EnglishName": "Cure III",
+ "FrenchName": "Méga Soin",
+ "GermanName": "Vitaga",
+ "JapaneseName": "ケアルガ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 29288,
+ "EnglishName": "Curefish",
+ "FrenchName": "Guérisandre",
+ "GermanName": "Heilerfisch",
+ "JapaneseName": "エスナカブリ"
+ },
+ {
+ "Type": "LeveQuest",
+ "IconId": 71241,
+ "EnglishName": "The Cure",
+ "FrenchName": "Apprivoisement: mandragores curatives",
+ "GermanName": "Sprossen gegen alles",
+ "JapaneseName": "懐柔任務:輸出用のマンドラゴラ"
+ },
+ {
+ "Type": "Status",
+ "IconId": 10410,
+ "EnglishName": "Freecure",
+ "FrenchName": "Extra Soin amélioré",
+ "GermanName": "Vitra +",
+ "JapaneseName": "ケアルラ効果アップ"
+ },
+ {
+ "Type": "Status",
+ "IconId": 10411,
+ "EnglishName": "Overcure",
+ "FrenchName": "Méga Soin amélioré",
+ "GermanName": "Vitaga +",
+ "JapaneseName": "ケアルガ効果アップ"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5330,
+ "EnglishName": "Freecure",
+ "FrenchName": "Soin amélioré",
+ "GermanName": "Verbessertes Vita",
+ "JapaneseName": "ケアル効果アップ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64630,
+ "EnglishName": "Cure L II",
+ "FrenchName": "Évocation Logos : Extra Soin",
+ "GermanName": "Logos-Vitra",
+ "JapaneseName": "ロゴス・ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64682,
+ "EnglishName": "Lost Cure",
+ "FrenchName": "Soin oublié",
+ "GermanName": "Verschollene Vita",
+ "JapaneseName": "ロスト・ケアル"
+ },
+ {
+ "Type": "Item",
+ "IconId": 27953,
+ "EnglishName": "Cure L II",
+ "FrenchName": "Évocation Logos: Extra Soin",
+ "GermanName": "Logos-Splitter des Vitra",
+ "JapaneseName": "ロゴス・ケアルラ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 64682,
+ "EnglishName": "Lost Cure",
+ "FrenchName": "Soin oublié",
+ "GermanName": "Frontsplitter des verschollenen Vita",
+ "JapaneseName": "ロスト・ケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 935,
+ "EnglishName": "Choco Cure",
+ "FrenchName": "Choco-soin",
+ "GermanName": "Chocobo-Vita",
+ "JapaneseName": "チョコケアル"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64632,
+ "EnglishName": "Cure L III",
+ "FrenchName": "Évocation Logos : Méga Soin",
+ "GermanName": "Logos-Vitaga",
+ "JapaneseName": "ロゴス・ケアルガ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Vercure III",
+ "FrenchName": "VerMéga Soin",
+ "GermanName": "Erzvitaga",
+ "JapaneseName": "ヴァルケアルガ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64683,
+ "EnglishName": "Lost Cure II",
+ "FrenchName": "Extra Soin oublié",
+ "GermanName": "Verschollene Vitra",
+ "JapaneseName": "ロスト・ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64685,
+ "EnglishName": "Lost Cure IV",
+ "FrenchName": "Giga Soin oublié",
+ "GermanName": "Verschollene Vitaka",
+ "JapaneseName": "ロスト・ケアルジャ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "True Cure II",
+ "FrenchName": "Extra Soin véritable",
+ "GermanName": "Vollkommenes Vitra",
+ "JapaneseName": "トゥルー・ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64756,
+ "EnglishName": "Variant Cure",
+ "FrenchName": "Soin embranché",
+ "GermanName": "Unstetes Vita",
+ "JapaneseName": "ヴァリアント・ケアル"
+ },
+ {
+ "Type": "Item",
+ "IconId": 64683,
+ "EnglishName": "Lost Cure II",
+ "FrenchName": "Extra Soin oublié",
+ "GermanName": "Frontsplitter des verschollenen Vitra",
+ "JapaneseName": "ロスト・ケアルラ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 64685,
+ "EnglishName": "Lost Cure IV",
+ "FrenchName": "Giga Soin oublié",
+ "GermanName": "Frontsplitter des verschollenen Vitaka",
+ "JapaneseName": "ロスト・ケアルジャ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Obscure Woods",
+ "FrenchName": "Forêt obscure",
+ "GermanName": "Finsterer Wald",
+ "JapaneseName": "暗黒森林"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64684,
+ "EnglishName": "Lost Cure III",
+ "FrenchName": "Méga Soin oublié",
+ "GermanName": "Verschollene Vitaga",
+ "JapaneseName": "ロスト・ケアルガ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 64684,
+ "EnglishName": "Lost Cure III",
+ "FrenchName": "Méga Soin oublié",
+ "GermanName": "Frontsplitter des verschollenen Vitaga",
+ "JapaneseName": "ロスト・ケアルガ"
+ },
+ {
+ "Type": "LeveQuest",
+ "IconId": 71241,
+ "EnglishName": "The Only Cure",
+ "FrenchName": "Prélèvement: des tisanes pour les petits Ronsos",
+ "GermanName": "Fiebersenkende Kräuter",
+ "JapaneseName": "調査採集:ロンゾ族の熱病対策"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Ronkan Cure II",
+ "FrenchName": "Extra Soin ronka",
+ "GermanName": "Ronka-Vitra",
+ "JapaneseName": "ロンカ・ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64816,
+ "EnglishName": "Ronkan Cure II",
+ "FrenchName": "Extra Soin ronka",
+ "GermanName": "Ronka-Vitra",
+ "JapaneseName": "ロンカ・ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64753,
+ "EnglishName": "Lost Full Cure",
+ "FrenchName": "Maxi Soin oublié",
+ "GermanName": "Verschollene Erneuerung",
+ "JapaneseName": "ロスト・フルケア"
+ },
+ {
+ "Type": "Item",
+ "IconId": 64753,
+ "EnglishName": "Lost Full Cure",
+ "FrenchName": "Maxi Soin oublié",
+ "GermanName": "Frontsplitter des verschollenen Erneuerung",
+ "JapaneseName": "ロスト・フルケア"
+ },
+ {
+ "Type": "Status",
+ "IconId": 14985,
+ "EnglishName": "Cure III Ready",
+ "FrenchName": "Méga Soin préparé",
+ "GermanName": "Vitaga bereit",
+ "JapaneseName": "ケアルガ実行可"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Ronkan Cure III",
+ "FrenchName": "Méga Soin ronka",
+ "GermanName": "Ronka-Vitaga",
+ "JapaneseName": "ロンカ・ケアルガ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Namazu procurer",
+ "FrenchName": "Namazu préposé aux offrandes",
+ "GermanName": "Namazuo-Opfergabenbeauftragt[a]",
+ "JapaneseName": "供物調達係のナマズオ"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": "A Pound of Cure",
+ "FrenchName": "Remède contre les bagarres",
+ "GermanName": "Aufruhr an der Feldscheune",
+ "JapaneseName": "拳の語らい"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Absolute Cure II",
+ "FrenchName": "Extra Soin absolu",
+ "GermanName": "Absolutes Vitra",
+ "JapaneseName": "アブソリュートケアルラ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "dwarven procurer",
+ "FrenchName": "Nain responsable du ravitaillement",
+ "GermanName": "Nachschub-Zwerg",
+ "JapaneseName": "補充担当のドワーフ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 20036,
+ "EnglishName": "Obscure Logogram",
+ "FrenchName": "Éclat Logos de maître scelleur non identifié",
+ "GermanName": "Unprospektierter Logos-Splitter des Siegels",
+ "JapaneseName": "未鑑定ロゴスシャード:封印"
+ },
+ {
+ "Type": "Status",
+ "IconId": 16739,
+ "EnglishName": "Variant Cure Set",
+ "FrenchName": "Soin embranché",
+ "GermanName": "Flüchtige Macht: Unstetes Vita",
+ "JapaneseName": "ヴァリアント・ケアル設定"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Sanctified Cure II",
+ "FrenchName": "Extra Soin sanctifié",
+ "GermanName": "Gesegnetes Vitra",
+ "JapaneseName": "サンクティファイド・ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Sanctified Cure II",
+ "FrenchName": "Soin sanctifié",
+ "GermanName": "Gesegnetes Vitra",
+ "JapaneseName": "サンクティファイド・ケアル"
+ },
+ {
+ "Type": "LeveQuest",
+ "IconId": 71241,
+ "EnglishName": "Cure for What Ails",
+ "FrenchName": "Grosse commande: jus de légume requinquant",
+ "GermanName": "Ein Schluck am Morgen vertreibt die Sorgen",
+ "JapaneseName": "大口依頼:朝食の一杯"
+ },
+ {
+ "Type": "Item",
+ "IconId": 30664,
+ "EnglishName": "Obscure Hyposkhesphyra",
+ "FrenchName": "Hyposkhesphyra obscure",
+ "GermanName": "Düster-Hyposkhesphyra",
+ "JapaneseName": "オブスキュア・イポスセスフィラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64816,
+ "EnglishName": "Cure II of the Seventh Dawn",
+ "FrenchName": "Extra Soin des Héritiers",
+ "GermanName": "Vitra der Morgenröte",
+ "JapaneseName": "サイオンズ・ケアルラ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Cure II of the Seventh Dawn",
+ "FrenchName": "Extra Soin des Héritiers",
+ "GermanName": "Vitra der Morgenröte",
+ "JapaneseName": "サイオンズ・ケアルラ"
+ },
+ {
+ "Type": "Instance",
+ "IconId": 61806,
+ "EnglishName": "the Borderland Ruins (Secure)",
+ "FrenchName": "les Ruines frontalières (annexion)",
+ "GermanName": "Äußere Ruinen (Sicherung)",
+ "JapaneseName": "外縁遺跡群 (制圧戦)"
+ },
+ {
+ "Type": "Fate",
+ "IconId": 60724,
+ "EnglishName": "Omicron Recall: Secure Connection",
+ "FrenchName": "Mémoire vive: pare-feu",
+ "GermanName": "Aus dem Speicher von BNpcName: Gefahrenabwehr",
+ "JapaneseName": "BNpcNameのメモリーより:BNpcName防衛"
+ },
+ {
+ "Type": "Item",
+ "IconId": 26154,
+ "EnglishName": "Chocobo Training Manual - Choco Cure I",
+ "FrenchName": "Manuel de dressage: Choco-soin I",
+ "GermanName": "Dressurbuch - Chocobo-Vita I",
+ "JapaneseName": "チョコボ教本:チョコケアル"
+ },
+ {
+ "Type": "Item",
+ "IconId": 26154,
+ "EnglishName": "Chocobo Training Manual - Choco Cure II",
+ "FrenchName": "Manuel de dressage: Choco-soin II",
+ "GermanName": "Dressurbuch - Chocobo-Vita II",
+ "JapaneseName": "チョコボ教本:チョコケアルII"
+ },
+ {
+ "Type": "Item",
+ "IconId": 26154,
+ "EnglishName": "Chocobo Training Manual - Choco Cure III",
+ "FrenchName": "Manuel de dressage: Choco-soin III",
+ "GermanName": "Dressurbuch - Chocobo-Vita III",
+ "JapaneseName": "チョコボ教本:チョコケアルIII"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.BNpcname_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.BNpcname_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..9c19b0a
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.BNpcname_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,138 @@
+[
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "bhoot",
+ "FrenchName": "bhut",
+ "GermanName": "Bhut",
+ "JapaneseName": "ブフート"
+ },
+ {
+ "Type": "Fate",
+ "IconId": 60721,
+ "EnglishName": "Das Bhoot",
+ "FrenchName": "Le don du repos éternel",
+ "GermanName": "Und was sich reimt, ist Bhut",
+ "JapaneseName": "エクソシスト"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "polis bhoot",
+ "FrenchName": "bhut de l'Aquapole",
+ "GermanName": "Aquapolis-Bhut",
+ "JapaneseName": "アクアポリス・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "gelid bhoot",
+ "FrenchName": "bhut glacial",
+ "GermanName": "eisig[a] Bhut",
+ "JapaneseName": "ジェリド・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "guard bhoot",
+ "FrenchName": "bhut gardien",
+ "GermanName": "Wächter-Bhut",
+ "JapaneseName": "ガード・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Pyros bhoot",
+ "FrenchName": "bhut Pyros",
+ "GermanName": "Pyros-Bhut",
+ "JapaneseName": "ピューロス・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Mhachi bhoot",
+ "FrenchName": "bhut mhachois",
+ "GermanName": "Mhach-Bhut",
+ "JapaneseName": "マハ・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "broken bhoot",
+ "FrenchName": "bhut écorché",
+ "GermanName": "Klippen-Bhut",
+ "JapaneseName": "ブロークン・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "impure bhoot",
+ "FrenchName": "bhut impur",
+ "GermanName": "unrein[a] Bhut",
+ "JapaneseName": "インピュア・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Zadnor bhoot",
+ "FrenchName": "bhut de Zadnor",
+ "GermanName": "Zadnor-Bhut",
+ "JapaneseName": "ザトゥノル・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Orthos bhoot",
+ "FrenchName": "bhut Orthos",
+ "GermanName": "Orthos-Bhut",
+ "JapaneseName": "オルト・ブフート"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": " Bhoot Camps",
+ "FrenchName": " Les anges de l'insalubrité",
+ "GermanName": " Geisterstunde",
+ "JapaneseName": " 浮遊する布"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "horrific bhoot",
+ "FrenchName": "bhut horrifique",
+ "GermanName": "schrecklich[a] Bhut",
+ "JapaneseName": "ホリフィック・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "duskfall bhoot",
+ "FrenchName": "bhut nocturne",
+ "GermanName": "Dämmer-Bhut",
+ "JapaneseName": "ナイト・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "nightmare bhoot",
+ "FrenchName": "bhut du cauchemar",
+ "GermanName": "Albtraum-Bhut",
+ "JapaneseName": "ナイトメア・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "deep palace bhoot",
+ "FrenchName": "bhut des profondeurs",
+ "GermanName": "Katakomben-Bhut",
+ "JapaneseName": "ディープパレス・ブフート"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "somnambulant bhoot",
+ "FrenchName": "bhut somnambule",
+ "GermanName": "Schlafwandler-Bhut",
+ "JapaneseName": "ソムナムブラント・ブフート"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Companion_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Companion_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..f22323b
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Companion_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,26 @@
+[
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "lesser panda",
+ "FrenchName": "petit panda roux",
+ "GermanName": "Rotpanda-Stofftier",
+ "JapaneseName": "レッサーパンダ"
+ },
+ {
+ "Type": "Minion",
+ "IconId": 0,
+ "EnglishName": "lesser panda",
+ "FrenchName": "petit panda roux",
+ "GermanName": "Rotpanda-Stofftier",
+ "JapaneseName": "レッサーパンダ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 59534,
+ "EnglishName": "Lesser Panda",
+ "FrenchName": "Petit panda roux",
+ "GermanName": "Rotpanda-Stofftier",
+ "JapaneseName": "レッサーパンダ"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ContentFinderCondition_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ContentFinderCondition_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..305cbd0
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ContentFinderCondition_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,82 @@
+[
+ {
+ "Type": "Instance",
+ "IconId": 61801,
+ "EnglishName": "Sastasha",
+ "FrenchName": "Sastasha",
+ "GermanName": "Sastasha",
+ "JapaneseName": "天然要害 サスタシャ浸食洞"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Sastasha",
+ "FrenchName": "Sastasha",
+ "GermanName": "Sastasha-Höhle",
+ "JapaneseName": "サスタシャ浸食洞"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Sastasha",
+ "FrenchName": "Sastasha",
+ "GermanName": "Sastasha",
+ "JapaneseName": "天然要害 サスタシャ浸食洞"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Sastasha pugil",
+ "FrenchName": "pugil de Sastasha",
+ "GermanName": "Sastasha-Pugil",
+ "JapaneseName": "サスタシャ・プギル"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Sastasha orobon",
+ "FrenchName": "orobon de Sastasha",
+ "GermanName": "Sastasha-Orobon",
+ "JapaneseName": "サスタシャ・オロボン"
+ },
+ {
+ "Type": "Instance",
+ "IconId": 61801,
+ "EnglishName": "Sastasha (Hard)",
+ "FrenchName": "Sastasha (brutal)",
+ "GermanName": "Sastasha (schwer)",
+ "JapaneseName": "逆襲要害 サスタシャ浸食洞 (Hard)"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Sastasha (Hard)",
+ "FrenchName": "Sastasha (brutal)",
+ "GermanName": "Sastasha-Höhle (schwer)",
+ "JapaneseName": "サスタシャ浸食洞 (Hard)"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Sastasha Seagrot",
+ "FrenchName": "Grotte marine de Sastasha",
+ "GermanName": "Sastasha-Höhle",
+ "JapaneseName": "浸食洞"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 1001,
+ "EnglishName": "Mapping the Realm: Sastasha",
+ "FrenchName": "Cartographe du continent : Sastasha",
+ "GermanName": "Kartograph: Sastasha",
+ "JapaneseName": "サスタシャ浸食洞を踏破せし者"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 1001,
+ "EnglishName": "Remapping the Realm: Sastasha",
+ "FrenchName": "Cartographe du continent : Sastasha (brutal)",
+ "GermanName": "Kartograph: Sastasha-Höhle (schwer)",
+ "JapaneseName": "サスタシャ浸食洞を再び踏破せし者"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.CraftAction_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.CraftAction_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..c13ead7
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.CraftAction_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,130 @@
+[
+ {
+ "Type": "Action",
+ "IconId": 1518,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Action",
+ "IconId": 1568,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Action",
+ "IconId": 1618,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Action",
+ "IconId": 1667,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Action",
+ "IconId": 1718,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Action",
+ "IconId": 1767,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Action",
+ "IconId": 1818,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Action",
+ "IconId": 1867,
+ "EnglishName": "Groundwork",
+ "FrenchName": "Travail préparatoire",
+ "GermanName": "Vorarbeit",
+ "JapaneseName": "下地作業"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6990,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6991,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6992,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6993,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6994,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6995,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6996,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6997,
+ "EnglishName": "Groundwork Mastery",
+ "FrenchName": "Maîtrise de Travail préparatoire",
+ "GermanName": "Meister der Vorarbeit",
+ "JapaneseName": "下地作業マスタリー"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ENpcResident_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ENpcResident_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..c452793
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.ENpcResident_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,66 @@
+[
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "G'raha Tia",
+ "FrenchName": "G'raha Tia",
+ "GermanName": "G'raha Tia",
+ "JapaneseName": "グ・ラハ・ティア"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "G'raha Tia",
+ "FrenchName": "voix de G'raha Tia",
+ "GermanName": "G'raha Tia",
+ "JapaneseName": "グ・ラハ・ティアの声"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "G'raha Tia",
+ "FrenchName": "",
+ "GermanName": "",
+ "JapaneseName": ""
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "G'raha Tia",
+ "FrenchName": "G'raha Tia",
+ "GermanName": "",
+ "JapaneseName": ""
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "wind-up G'raha Tia",
+ "FrenchName": "G'raha Tia miniature",
+ "GermanName": "G'raha Tia-Puppe",
+ "JapaneseName": "マメット・グ・ラハ"
+ },
+ {
+ "Type": "Minion",
+ "IconId": 0,
+ "EnglishName": "wind-up G'raha Tia",
+ "FrenchName": "G'raha Tia miniature",
+ "GermanName": "G'raha Tia-Puppe",
+ "JapaneseName": "マメット・グ・ラハ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 59706,
+ "EnglishName": "Wind-up G'raha Tia",
+ "FrenchName": "G'raha Tia miniature",
+ "GermanName": "G'raha Tia-Puppe",
+ "JapaneseName": "マメット・グ・ラハ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "G'raha Tia's avatar",
+ "FrenchName": "avatar de G'raha Tia",
+ "GermanName": "G'raha Tia[p] an deiner Seite",
+ "JapaneseName": "グ・ラハ・ティアの幻体"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Emote_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Emote_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..c19b6f4
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Emote_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,802 @@
+[
+ {
+ "Type": "Action",
+ "IconId": 64199,
+ "EnglishName": "Pet",
+ "FrenchName": "Caresser",
+ "GermanName": "Streicheln",
+ "JapaneseName": "撫でる"
+ },
+ {
+ "Type": "Emote",
+ "IconId": 64067,
+ "EnglishName": "Pet",
+ "FrenchName": "Caresser",
+ "GermanName": "Streicheln",
+ "JapaneseName": "なでる"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petal",
+ "FrenchName": "Pétale",
+ "GermanName": "Blütenbad",
+ "JapaneseName": "ペタルシャワー"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Puppet",
+ "FrenchName": "憑依",
+ "GermanName": "Obsession",
+ "JapaneseName": "憑依"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Puppet",
+ "FrenchName": "Possession",
+ "GermanName": "Obsession",
+ "JapaneseName": "憑依"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petrai",
+ "FrenchName": "Pétra",
+ "GermanName": "Petrai",
+ "JapaneseName": "ペトゥライ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24053,
+ "EnglishName": "Crumpet",
+ "FrenchName": "Crumpet",
+ "GermanName": "Crumpet",
+ "JapaneseName": "クランペット"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Parapet",
+ "FrenchName": "Parapet",
+ "GermanName": "Brustwehr",
+ "JapaneseName": "長城胸壁"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "okyupete",
+ "FrenchName": "ocypète",
+ "GermanName": "Okypete",
+ "JapaneseName": "オキュペテ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 21275,
+ "EnglishName": "Petalite",
+ "FrenchName": "Pétalite",
+ "GermanName": "Petalit",
+ "JapaneseName": "ペタライト"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Puppet 2P",
+ "FrenchName": "clone",
+ "GermanName": "2P: Spaltung",
+ "JapaneseName": "2P:分裂体"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "petalodus",
+ "FrenchName": "petalodus",
+ "GermanName": "Petalodus",
+ "JapaneseName": "ペタロドゥス"
+ },
+ {
+ "Type": "Item",
+ "IconId": 22615,
+ "EnglishName": "Saltpeter",
+ "FrenchName": "Salpêtre",
+ "GermanName": "Salpeter",
+ "JapaneseName": "硝石"
+ },
+ {
+ "Type": "Item",
+ "IconId": 51037,
+ "EnglishName": "Carpeting",
+ "FrenchName": "Carré de carpette",
+ "GermanName": "Teppichboden",
+ "JapaneseName": "カーペット"
+ },
+ {
+ "Type": "Item",
+ "IconId": 28443,
+ "EnglishName": "Petalfish",
+ "FrenchName": "Rose-pétale",
+ "GermanName": "Blütenblatt",
+ "JapaneseName": "ペタルフィッシュ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Snipethoom",
+ "FrenchName": "Tir précis",
+ "GermanName": "Fangschuss",
+ "JapaneseName": "狙撃"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petal Shot",
+ "FrenchName": "Tir de pétales",
+ "GermanName": "Blütenschuss",
+ "JapaneseName": "ペタルショット"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petro Eyes",
+ "FrenchName": "Pétriyeux",
+ "GermanName": "Petri-Augen",
+ "JapaneseName": "ペトロアイズ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petriburst",
+ "FrenchName": "Salve pétrifiante",
+ "GermanName": "Steinstoß",
+ "JapaneseName": "ペトリバースト"
+ },
+ {
+ "Type": "Fate",
+ "IconId": 60722,
+ "EnglishName": "Pet, Smart",
+ "FrenchName": "Défi: couchée, sale bête !",
+ "GermanName": "Blinde Wut",
+ "JapaneseName": "忠義の妖王「ムチャリンダ」"
+ },
+ {
+ "Type": "Item",
+ "IconId": 52029,
+ "EnglishName": "Red Carpet",
+ "FrenchName": "Tapis rouge",
+ "GermanName": "Roter Teppich",
+ "JapaneseName": "レッドカーペット"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petribreath",
+ "FrenchName": "Pétrihaleine",
+ "GermanName": "Petri-Atem",
+ "JapaneseName": "ペトロブレス"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Carpet Bomb",
+ "FrenchName": "Tapis de bombes",
+ "GermanName": "Flächenbombardement",
+ "JapaneseName": "絨毯爆撃"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "limpet bomb",
+ "FrenchName": "bombo collant",
+ "GermanName": "Haft-Bomber",
+ "JapaneseName": "リムペットボム"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "petrosphere",
+ "FrenchName": "pétrosphère",
+ "GermanName": "Petrosphäre[p] II",
+ "JapaneseName": "ペトロスフィアI"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "the Puppets",
+ "FrenchName": "sous-agglomérat de pantins",
+ "GermanName": "abgespalten[a] Klumpen",
+ "JapaneseName": "分裂シタ人形タチ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 29729,
+ "EnglishName": "Peteinosaur",
+ "FrenchName": "Peteinosaurus",
+ "GermanName": "Peteinosaurus",
+ "JapaneseName": "ペティノサウルス"
+ },
+ {
+ "Type": "Item",
+ "IconId": 29419,
+ "EnglishName": "Petal Shell",
+ "FrenchName": "Fleur-de-prunier",
+ "GermanName": "Pflaumenblüte",
+ "JapaneseName": "梅花貝"
+ },
+ {
+ "Type": "LeveQuest",
+ "IconId": 71241,
+ "EnglishName": "Puppet Show",
+ "FrenchName": "Récupération: écailles pour pantin",
+ "GermanName": "Nachwuchsförderung",
+ "JapaneseName": "獲得任務:標的用の竜鱗"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "The Parapet",
+ "FrenchName": "Château dimensionnel - toit",
+ "GermanName": "Dach",
+ "JapaneseName": "次元城:屋上"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petrifaction",
+ "FrenchName": "Pétrification",
+ "GermanName": "Versteinerung",
+ "JapaneseName": "ペトリファクション"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petriblaster",
+ "FrenchName": "Pétri électrochoc",
+ "GermanName": "Petri-Schlag",
+ "JapaneseName": "ペトリブラスター"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petal Shower",
+ "FrenchName": "Pluie de pétales",
+ "GermanName": "Blütenbad",
+ "JapaneseName": "ペタルシャワー"
+ },
+ {
+ "Type": "Action",
+ "IconId": 64751,
+ "EnglishName": "Lost Impetus",
+ "FrenchName": "Impulsion oubliée",
+ "GermanName": "Verschollener Impuls",
+ "JapaneseName": "ロスト・インペタス"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "carpet stain",
+ "FrenchName": "tache du tapis",
+ "GermanName": "Teppichschleimer",
+ "JapaneseName": "カーペット・ステイン"
+ },
+ {
+ "Type": "Item",
+ "IconId": 29610,
+ "EnglishName": "Magic Carpet",
+ "FrenchName": "Tapis volant",
+ "GermanName": "Dünengleiter",
+ "JapaneseName": "ホーリーカーペット"
+ },
+ {
+ "Type": "Item",
+ "IconId": 21477,
+ "EnglishName": "Raw Petalite",
+ "FrenchName": "Pétalite brute",
+ "GermanName": "Roh-Petalit",
+ "JapaneseName": "ペタライト原石"
+ },
+ {
+ "Type": "Item",
+ "IconId": 64751,
+ "EnglishName": "Lost Impetus",
+ "FrenchName": "Impulsion oubliée",
+ "GermanName": "Frontsplitter des verschollenen Impuls",
+ "JapaneseName": "ロスト・インペタス"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Perpetual Ray",
+ "FrenchName": "Rayon perpétuel",
+ "GermanName": "Perpetueller Strahl",
+ "JapaneseName": "パーペチュアルレイ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Sixth Trumpet",
+ "FrenchName": "Sonnerie de clairon",
+ "GermanName": "Himmlischer Ruf",
+ "JapaneseName": "進軍ラッパ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 3319,
+ "EnglishName": "Perpetual Ray",
+ "FrenchName": "Rayon perpétuel",
+ "GermanName": "Perpetueller Strahl",
+ "JapaneseName": "パーペチュアルレイ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Carpet Beater",
+ "FrenchName": "Tapette à tapis",
+ "GermanName": "Teppichklopfer",
+ "JapaneseName": "カーペットビーター"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Pliant Petals",
+ "FrenchName": "Cercle de floraison",
+ "GermanName": "Erwachte Blüte",
+ "JapaneseName": "咲き誇る大輪"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Petyr Winsome",
+ "FrenchName": "Petyr Winsome",
+ "GermanName": "Petyr Winsome",
+ "JapaneseName": "ピーター・ウィンソム"
+ },
+ {
+ "Type": "Item",
+ "IconId": 22402,
+ "EnglishName": "Petrified Log",
+ "FrenchName": "Rondin pétrifié",
+ "GermanName": "Silifizierter Stamm",
+ "JapaneseName": "珪化木"
+ },
+ {
+ "Type": "Item",
+ "IconId": 21267,
+ "EnglishName": "Petrified Orb",
+ "FrenchName": "Bille de bois pétrifié",
+ "GermanName": "Versteinerte Sphäre",
+ "JapaneseName": "珪化木丸玉"
+ },
+ {
+ "Type": "Item",
+ "IconId": 26296,
+ "EnglishName": "Puppet's Coin",
+ "FrenchName": "Pièce rouillée des Pantins",
+ "GermanName": "Puppen-Münze",
+ "JapaneseName": "人形の古銭"
+ },
+ {
+ "Type": "Item",
+ "IconId": 51052,
+ "EnglishName": "Greige Carpet",
+ "FrenchName": "Moquette écru",
+ "GermanName": "Graubeiger Teppich",
+ "JapaneseName": "グレージュカーペット"
+ },
+ {
+ "Type": "Status",
+ "IconId": 15001,
+ "EnglishName": "Petrification",
+ "FrenchName": "Pétrification",
+ "GermanName": "Stein",
+ "JapaneseName": "石化"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petrifying Eye",
+ "FrenchName": "Œil pétrifiant",
+ "GermanName": "Steinauge",
+ "JapaneseName": "ペトリアイ"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petrattraction",
+ "FrenchName": "Attraction pétrifiante",
+ "GermanName": "Petrifikation",
+ "JapaneseName": "ペトリアトラクト"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petrified Peat",
+ "FrenchName": "Roulage de boue",
+ "GermanName": "Matschkuchen",
+ "JapaneseName": "泥団子作り"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "void trumpeter",
+ "FrenchName": "trompettiste du néant",
+ "GermanName": "Nichtstrompeter",
+ "JapaneseName": "ヴォイド・トランペッター"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "chimera poppet",
+ "FrenchName": "chimère en peluche",
+ "GermanName": "Chimären-Puppe",
+ "JapaneseName": "パペットキメラ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "petite student",
+ "FrenchName": "étudiante lalafelle",
+ "GermanName": "klein[a] Student",
+ "JapaneseName": "小柄な魔法大学生"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "playful poppet",
+ "FrenchName": "garçon guilleret",
+ "GermanName": "fröhlich[a] Junge",
+ "JapaneseName": "星芒祭を楽しむ少年"
+ },
+ {
+ "Type": "Mount",
+ "IconId": 4144,
+ "EnglishName": "Eurekan petrel",
+ "FrenchName": "hirondelle d'Eurêka",
+ "GermanName": "Eureka-Schwalbe",
+ "JapaneseName": "エウレカスワロー"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": "Petalouda Hunt",
+ "FrenchName": "Chasse aux papillons",
+ "GermanName": "Ätherisch gekleidet",
+ "JapaneseName": "ペタルダは翻る"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Level 5 Petrify",
+ "FrenchName": "Pétrification niveau 5",
+ "GermanName": "Petrifikation Stufe 5",
+ "JapaneseName": "レベル5石化"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Level X Petrify",
+ "FrenchName": "Pétrification niveau X",
+ "GermanName": "Petrifikation Stufe X",
+ "JapaneseName": "レベルX石化"
+ },
+ {
+ "Type": "Action",
+ "IconId": 3282,
+ "EnglishName": "Level 5 Petrify",
+ "FrenchName": "Pétrification niveau 5",
+ "GermanName": "Petrifikation Stufe 5",
+ "JapaneseName": "レベル5石化"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Magitek Impetus",
+ "FrenchName": "Impulsion magitek",
+ "GermanName": "Magitek-Impuls",
+ "JapaneseName": "魔導インペタス"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Drifting Petals",
+ "FrenchName": "Pétales faillissants",
+ "GermanName": "Blütenblätterregen",
+ "JapaneseName": "落花流水の術"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "kyane petalouda",
+ "FrenchName": "cyanopétalouda",
+ "GermanName": "Kyane-Petalouda",
+ "JapaneseName": "キアネ・ペタルダ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "magicked puppet",
+ "FrenchName": "soldat-mage des Thorne",
+ "GermanName": "magisch[a] Marionette",
+ "JapaneseName": "ソーン・マジックソルジャー"
+ },
+ {
+ "Type": "Item",
+ "IconId": 52022,
+ "EnglishName": "Magicked Carpet",
+ "FrenchName": "Tapis magique",
+ "GermanName": "Fliegender Teppich",
+ "JapaneseName": "マジックカーペット"
+ },
+ {
+ "Type": "Mount",
+ "IconId": 4147,
+ "EnglishName": "magicked carpet",
+ "FrenchName": "tapis magique",
+ "GermanName": "Fliegender Teppich",
+ "JapaneseName": "マジックカーペット"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petrifying Voice",
+ "FrenchName": "Voix pétrifiante",
+ "GermanName": "Steinruf ",
+ "JapaneseName": "産石の声"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "O Petals, Unfurl",
+ "FrenchName": "Prière d'éclosion",
+ "GermanName": "O Blüten, erwachet!",
+ "JapaneseName": "祈願:咲き誇れ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "nightmare puppet",
+ "FrenchName": "poupée cauchemardesque",
+ "GermanName": "Albtraum-Puppe",
+ "JapaneseName": "ナイトメア・パペット"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "ktiseos okyupete",
+ "FrenchName": "ktiséos okyupète",
+ "GermanName": "Ktiseos-Okypete",
+ "JapaneseName": "キティセオス・オキュペテ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "petit pteranodon",
+ "FrenchName": "ptiranodon",
+ "GermanName": "Pteranoknirps",
+ "JapaneseName": "プチラノドン"
+ },
+ {
+ "Type": "Minion",
+ "IconId": 0,
+ "EnglishName": "petit pteranodon",
+ "FrenchName": "ptiranodon",
+ "GermanName": "Pteranoknirps",
+ "JapaneseName": "プチラノドン"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "petrified pauper",
+ "FrenchName": "mendiant terrifié",
+ "GermanName": "ängstlich[a] Bettler",
+ "JapaneseName": "怯えた貧民"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "impetuous moogle",
+ "FrenchName": "Mog impatient",
+ "GermanName": "Träum-Mogry",
+ "JapaneseName": "まだまだモーグリ"
+ },
+ {
+ "Type": "Fate",
+ "IconId": 63914,
+ "EnglishName": "All Pets Are Off",
+ "FrenchName": "Belles plantes",
+ "GermanName": "Ungeheuerlich!",
+ "JapaneseName": "華麗なる珍獣使い"
+ },
+ {
+ "Type": "Item",
+ "IconId": 41134,
+ "EnglishName": "Wizard's Petasos",
+ "FrenchName": "Pétase du sorcier",
+ "GermanName": "Zauberer-Petasos",
+ "JapaneseName": "ウィザードペタソス"
+ },
+ {
+ "Type": "Item",
+ "IconId": 22615,
+ "EnglishName": "Coarse Saltpeter",
+ "FrenchName": "Salpêtre grossier",
+ "GermanName": "Rohsalpeter-Klumpen",
+ "JapaneseName": "粗硝石"
+ },
+ {
+ "Type": "Item",
+ "IconId": 59788,
+ "EnglishName": "Petit Pteranodon",
+ "FrenchName": "Ptiranodon",
+ "GermanName": "Pteranoknirps",
+ "JapaneseName": "プチラノドン"
+ },
+ {
+ "Type": "Item",
+ "IconId": 22418,
+ "EnglishName": "Wattle Petribark",
+ "FrenchName": "Écorce d'acacia durcie",
+ "GermanName": "Hartakazienrinde",
+ "JapaneseName": "ハードワットル樹皮"
+ },
+ {
+ "Type": "Item",
+ "IconId": 22210,
+ "EnglishName": "Petalouda Scales",
+ "FrenchName": "Écailles alaires de pétalouda",
+ "GermanName": "Flügelstaub einer Petalouda",
+ "JapaneseName": "ペタルダの鱗粉"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Petrifying Shriek",
+ "FrenchName": "Cri pétrifiant",
+ "GermanName": "Steinschrei",
+ "JapaneseName": "産石の叫声"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "kokkine petalouda",
+ "FrenchName": "érythropétalouda",
+ "GermanName": "Kokkine-Petalouda",
+ "JapaneseName": "コーキネ・ペタルダ"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "impetuous warrior",
+ "FrenchName": "homme musculeux",
+ "GermanName": "muskulös[a] Mann",
+ "JapaneseName": "筋骨逞しい男"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "precocious poppet",
+ "FrenchName": "jeune demoiselle",
+ "GermanName": "modisch[a] Mädchen",
+ "JapaneseName": "おしゃまな少女"
+ },
+ {
+ "Type": "Item",
+ "IconId": 52030,
+ "EnglishName": "Carpet of Flowers",
+ "FrenchName": "Tapis à fleurs",
+ "GermanName": "Blumenteppich",
+ "JapaneseName": "フラワーラグ"
+ },
+ {
+ "Type": "LeveQuest",
+ "IconId": 71241,
+ "EnglishName": "Liquid Competence",
+ "FrenchName": "Fabrication: potions alchimiques améliorant la concentration",
+ "GermanName": "Konzentration im Glas",
+ "JapaneseName": "製作依頼:作業に集中する錬金薬"
+ },
+ {
+ "Type": "Status",
+ "IconId": 16603,
+ "EnglishName": "Poppet Resistance",
+ "FrenchName": "Immunité aux poupées",
+ "GermanName": "Puppen-Resistenz",
+ "JapaneseName": "ドール無効"
+ },
+ {
+ "Type": "Status",
+ "IconId": 15024,
+ "EnglishName": "Poppet Resistance",
+ "FrenchName": "Immunité aux poupées",
+ "GermanName": "Puppen-Resistenz",
+ "JapaneseName": "ドール無効"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Rheognosis Petrine",
+ "FrenchName": "Leonosis petros",
+ "GermanName": "Rheognose Petros",
+ "JapaneseName": "レーオノシス・ペトゥロス"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "potent petrosphere",
+ "FrenchName": "super pétrosphère",
+ "GermanName": "Petrosphäre[p] I",
+ "JapaneseName": "ペトロスフィアII"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "ianthine petalouda",
+ "FrenchName": "iodopétalouda",
+ "GermanName": "Ianthine-Petalouda",
+ "JapaneseName": "イアンティネ・ペタルダ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 41179,
+ "EnglishName": "Sorcerer's Petasos",
+ "FrenchName": "Pétase de l'ensorceleur",
+ "GermanName": "Hexenmeister-Petasos",
+ "JapaneseName": "ソーサラーペタソス"
+ },
+ {
+ "Type": "Item",
+ "IconId": 26038,
+ "EnglishName": "Fae Gwiber Trumpet",
+ "FrenchName": "Cor dragon pixie",
+ "GermanName": "Pixie-Gwiber-Pfeife",
+ "JapaneseName": "ピクシーグイベルの魔笛"
+ },
+ {
+ "Type": "Item",
+ "IconId": 22613,
+ "EnglishName": "Splendid Saltpeter",
+ "FrenchName": "Soufre forestier",
+ "GermanName": "Dschungelschwefel",
+ "JapaneseName": "発掘隊向けの硫黄"
+ },
+ {
+ "Type": "Item",
+ "IconId": 41848,
+ "EnglishName": "Spaekona's Petasos",
+ "FrenchName": "Pétase de spaekona",
+ "GermanName": "Spaekona-Petasos",
+ "JapaneseName": "スピコナペタソス"
+ },
+ {
+ "Type": "Action",
+ "IconId": 405,
+ "EnglishName": "Prehistoric Trumpet",
+ "FrenchName": "Trompette préhistorique",
+ "GermanName": "Prähistorisches Tröten",
+ "JapaneseName": "先史の咆哮"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "Mark II limpet bomb",
+ "FrenchName": "bombo collant évolué",
+ "GermanName": "brandneu[a] Haft-Bomber",
+ "JapaneseName": "新式リムペットボム"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "flame petty officer",
+ "FrenchName": "sous-officier des Immortels",
+ "GermanName": "Unteroffizier[p] der Legion",
+ "JapaneseName": "不滅隊の下士官"
+ },
+ {
+ "Type": "Npc",
+ "IconId": null,
+ "EnglishName": "storm petty officer",
+ "FrenchName": "sous-officier du Maelstrom",
+ "GermanName": "Unteroffizier[p] des Mahlstroms",
+ "JapaneseName": "黒渦団の下士官"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Fate_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Fate_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..35145a8
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Fate_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,10 @@
+[
+ {
+ "Type": "Fate",
+ "IconId": 60852,
+ "EnglishName": "Drink Me",
+ "FrenchName": "Rien que de l'eau",
+ "GermanName": "Planschende Glückshasen",
+ "JapaneseName": "水遊びのしあわせうさぎ"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Item_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Item_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..0ff4171
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Item_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,250 @@
+[
+ {
+ "Type": "Item",
+ "IconId": 25204,
+ "EnglishName": "Popoto",
+ "FrenchName": "Popoto",
+ "GermanName": "Toffel",
+ "JapaneseName": "ポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 27455,
+ "EnglishName": "Popoto Set",
+ "FrenchName": "Tubercule de popoto",
+ "GermanName": "Toffel-Knollen",
+ "JapaneseName": "ポポトの種芋"
+ },
+ {
+ "Type": "Emote",
+ "IconId": 64371,
+ "EnglishName": "Popoto Step",
+ "FrenchName": "Popping popoto",
+ "GermanName": "Toffel-Tanz",
+ "JapaneseName": "ポポトステップ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25204,
+ "EnglishName": "Wild Popoto",
+ "FrenchName": "Popoto sauvage",
+ "GermanName": "Wilde Toffel",
+ "JapaneseName": "ワイルドポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24022,
+ "EnglishName": "Popoto Soba",
+ "FrenchName": "Nouilles de sarrasin montagnardes",
+ "GermanName": "Toffel-Soba",
+ "JapaneseName": "とろろ蕎麦"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24164,
+ "EnglishName": "Popoto Salad",
+ "FrenchName": "Salade de popotos",
+ "GermanName": "Toffelsalat",
+ "JapaneseName": "ポポトサラダ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25221,
+ "EnglishName": "Giant Popoto",
+ "FrenchName": "Popoto géante",
+ "GermanName": "Riesentoffel",
+ "JapaneseName": "ジャイアントポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25204,
+ "EnglishName": "Russet Popoto",
+ "FrenchName": "Popoto brune",
+ "GermanName": "Ockertoffel",
+ "JapaneseName": "ラセットポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25204,
+ "EnglishName": "Island Popoto",
+ "FrenchName": "Popoto exotique",
+ "GermanName": "Paradiestoffel",
+ "JapaneseName": "アイルポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25221,
+ "EnglishName": "Dalamud Popoto",
+ "FrenchName": "Popoto de Dalamud",
+ "GermanName": "Dalamud-Toffel",
+ "JapaneseName": "ダラガブポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24457,
+ "EnglishName": "Mashed Popotoes",
+ "FrenchName": "Purée de popotos",
+ "GermanName": "Toffelbrei",
+ "JapaneseName": "マッシュポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24072,
+ "EnglishName": "Popoto Pancakes",
+ "FrenchName": "Crique",
+ "GermanName": "Toffelpuffer",
+ "JapaneseName": "ポポトパンケーキ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25221,
+ "EnglishName": "Walker's Popoto",
+ "FrenchName": "Belle de Noscea",
+ "GermanName": "Roter Admiral",
+ "JapaneseName": "メークインポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25227,
+ "EnglishName": "Mountain Popoto",
+ "FrenchName": "Popoto des montagnes",
+ "GermanName": "Bergtoffel",
+ "JapaneseName": "マウンテンポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24163,
+ "EnglishName": "Peppered Popotoes",
+ "FrenchName": "Popotos au poivre",
+ "GermanName": "Pfeffertoffel",
+ "JapaneseName": "ペッパーポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 23704,
+ "EnglishName": "Island Popoto Set",
+ "FrenchName": "Tubercules de popoto exotique",
+ "GermanName": "Paradiestoffel-Knollen",
+ "JapaneseName": "アイルポポトの種芋"
+ },
+ {
+ "Type": "Item",
+ "IconId": 27456,
+ "EnglishName": "Dalamud Popoto Set",
+ "FrenchName": "Tubercule de popoto de Dalamud",
+ "GermanName": "Dalamud-Toffelknollen",
+ "JapaneseName": "ダラガブポポトの種芋"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24112,
+ "EnglishName": "Popotoes au Gratin",
+ "FrenchName": "Gratin de popotos brunes",
+ "GermanName": "Ockertoffel-Gratin",
+ "JapaneseName": "ラセットポポトグラタン"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24114,
+ "EnglishName": "Chilled Popoto Soup",
+ "FrenchName": "Soupe de popotos glacée",
+ "GermanName": "Kalte Toffelsuppe",
+ "JapaneseName": "冷製ポポトスープ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25236,
+ "EnglishName": "Island Sweet Popoto",
+ "FrenchName": "Popoto douce exotique",
+ "GermanName": "Paradiessüßtoffel",
+ "JapaneseName": "アイルスイートポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24164,
+ "EnglishName": "Twilight Popoto Salad",
+ "FrenchName": "Salade de popotos aux pommes",
+ "GermanName": "Toffelsalat mit Apfel",
+ "JapaneseName": "アップルポポトサラダ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24072,
+ "EnglishName": "Giant Popoto Pancakes",
+ "FrenchName": "Crique géante",
+ "GermanName": "Riesentoffelpuffer",
+ "JapaneseName": "ジャイアントポポトパンケーキ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24096,
+ "EnglishName": "Isleworks Sweet Popoto",
+ "FrenchName": "Popoto doux manufacturé",
+ "GermanName": "Atelier-Süßtoffel",
+ "JapaneseName": "開拓工房のスイートポポト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24164,
+ "EnglishName": "Isleworks Popoto Salad",
+ "FrenchName": "Salade de popotos manufacturée",
+ "GermanName": "Atelier-Toffelsalat",
+ "JapaneseName": "開拓工房のポポトサラダ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 23741,
+ "EnglishName": "Island Sweet Popoto Set",
+ "FrenchName": "Tubercules de popoto douce exotique",
+ "GermanName": "Paradiessüßtoffel-Knollen",
+ "JapaneseName": "アイルスイートポポトの種芋"
+ },
+ {
+ "Type": "Fate",
+ "IconId": 60721,
+ "EnglishName": "All Vine and No Popotoes",
+ "FrenchName": "Occlusion d'otyughs",
+ "GermanName": "Grenzschutz",
+ "JapaneseName": "オチュー狩り"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": "You Say Popoto, I Say...",
+ "FrenchName": "Le bonheur est dans la forêt",
+ "GermanName": "Die dolle Knolle",
+ "JapaneseName": "求めるは野生種の恩恵"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24225,
+ "EnglishName": "Isleworks Sweet Popoto Pie",
+ "FrenchName": "Tarte à la popoto douce exotique",
+ "GermanName": "Atelier-Süßtoffeltörtchen",
+ "JapaneseName": "アイル・スイートポポトタルト"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24112,
+ "EnglishName": "Rarefied Popotoes au Gratin",
+ "FrenchName": "Gratin de popotos brunes collectionnable",
+ "GermanName": "Ockertoffel-Gratin (Sammlerstück)",
+ "JapaneseName": "収集用のラセットポポトグラタン"
+ },
+ {
+ "Type": "Item",
+ "IconId": 24072,
+ "EnglishName": "Rarefied Giant Popoto Pancakes",
+ "FrenchName": "Crique géante collectionnable",
+ "GermanName": "Riesentoffelpuffer (Sammlerstück)",
+ "JapaneseName": "収集用のジャイアントポポトパンケーキ"
+ },
+ {
+ "Type": "Item",
+ "IconId": 26435,
+ "EnglishName": "Ballroom Etiquette - The Popoto Step",
+ "FrenchName": "L'Étiquette éorzéenne: Popping popoto",
+ "GermanName": "Ballsaal-Etikette: Toffel-Tanz",
+ "JapaneseName": "演技教本:ポポトステップ"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Leve_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Leve_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..01c6edd
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Leve_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,10 @@
+[
+ {
+ "Type": "LeveQuest",
+ "IconId": 71241,
+ "EnglishName": "Practical Command",
+ "FrenchName": "Fabrication: potions alchimiques augmentant le talent artistique",
+ "GermanName": "Mit der Kunst noch nicht am Ende",
+ "JapaneseName": "製作依頼:品質を高める錬金薬"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Mount_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Mount_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..e4fe60a
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Mount_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,18 @@
+[
+ {
+ "Type": "Item",
+ "IconId": 26060,
+ "EnglishName": "Demi-Ozma",
+ "FrenchName": "Demi-Ozma",
+ "GermanName": "Demi-Yadis-Figur",
+ "JapaneseName": "デミオズマ"
+ },
+ {
+ "Type": "Mount",
+ "IconId": 4146,
+ "EnglishName": "Demi-Ozma",
+ "FrenchName": "demi-Ozma",
+ "GermanName": "Demi-Yadis",
+ "JapaneseName": "デミオズマ"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Orchestrion_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Orchestrion_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..e4cd410
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Orchestrion_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,34 @@
+[
+ {
+ "Type": "Orchestrion",
+ "IconId": 76406,
+ "EnglishName": "Pa-Paya",
+ "FrenchName": "Pa-Paya",
+ "GermanName": "Pa-Paya",
+ "JapaneseName": "Pa-Paya"
+ },
+ {
+ "Type": "Orchestrion",
+ "IconId": 76406,
+ "EnglishName": "Pa-Paya Demastered",
+ "FrenchName": "Pa-Paya Demastered",
+ "GermanName": "Pa-Paya Demastered",
+ "JapaneseName": "Pa-Paya Demastered"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25945,
+ "EnglishName": "Pa-Paya Orchestrion Roll",
+ "FrenchName": "Rouleau “Pa-Paya”",
+ "GermanName": "Notenrolle von „Pa-Paya“",
+ "JapaneseName": "オーケストリオン譜:Pa-Paya"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25945,
+ "EnglishName": "Pa-Paya Demastered Orchestrion Roll",
+ "FrenchName": "Rouleau “Pa-Paya Demastered”",
+ "GermanName": "Notenrolle von „Pa-Paya Demastered“",
+ "JapaneseName": "オーケストリオン譜:Pa-Paya Demastered"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.PlaceName_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.PlaceName_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..1ca9fff
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.PlaceName_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,106 @@
+[
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Limsa Lominsa",
+ "FrenchName": "Limsa Lominsa",
+ "GermanName": "Limsa Lominsa",
+ "JapaneseName": "リムサ・ロミンサ"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Limsa Lominsa",
+ "FrenchName": "Limsa Lominsa",
+ "GermanName": "Limsa Lominsa",
+ "JapaneseName": "リムサ・ロミンサ市街"
+ },
+ {
+ "Type": "Achievement",
+ "IconId": 62951,
+ "EnglishName": "Leaving Limsa Lominsa",
+ "FrenchName": "Le périple limséen",
+ "GermanName": "Das Meer ruft",
+ "JapaneseName": "リムサ・ロミンサからの旅立ち"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Central Limsa Lominsa",
+ "FrenchName": "Centre de Limsa Lominsa",
+ "GermanName": "Limsa Lominsa - Zentrum",
+ "JapaneseName": "中央管区"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": "Coming to Limsa Lominsa",
+ "FrenchName": "Bienvenue à Limsa Lominsa",
+ "GermanName": "Willkommen in Limsa Lominsa",
+ "JapaneseName": "海の都リムサ・ロミンサへ"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Limsa Lominsa Upper Decks",
+ "FrenchName": "Limsa Lominsa - Le Tillac",
+ "GermanName": "Obere Decks",
+ "JapaneseName": "リムサ・ロミンサ:上甲板層"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Limsa Lominsa Lower Decks",
+ "FrenchName": "Limsa Lominsa - L'Entrepont",
+ "GermanName": "Untere Decks",
+ "JapaneseName": "リムサ・ロミンサ:下甲板層"
+ },
+ {
+ "Type": "Place",
+ "IconId": null,
+ "EnglishName": "Limsa Lominsa Aetheryte Plaza",
+ "FrenchName": "Place de l'Éthérite",
+ "GermanName": "Ätherytenplatz",
+ "JapaneseName": "エーテライト・プラザ"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": "Streets of Moonfire (Limsa Lominsa)",
+ "FrenchName": "Les Feux de la Mort ressuscités (Limsa Lominsa)",
+ "GermanName": "Feurige Abenteurer gesucht (Limsa Lominsa)",
+ "JapaneseName": "紅蓮祭と海都の冒険者"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": "All the Little Ladies (Limsa Lominsa)",
+ "FrenchName": "Pour le plaisir des dames (Limsa Lominsa)",
+ "GermanName": "Feste wollen gefeiert werden (Limsa Lominsa)",
+ "JapaneseName": "プリンセスデーの海都"
+ },
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": "Egg-hunting We Will Go (Limsa Lominsa)",
+ "FrenchName": "Ouverture de la chasse aux Prœufs (Limsa Lominsa)",
+ "GermanName": "Die Wundereiersuche (Limsa)",
+ "JapaneseName": "エッグハント到来(海都)"
+ },
+ {
+ "Type": "Orchestrion",
+ "IconId": 76406,
+ "EnglishName": "Navigator's Glory - The Theme of Limsa Lominsa",
+ "FrenchName": "Navigator's Glory - The Theme of Limsa Lominsa",
+ "GermanName": "Navigator's Glory - The Theme of Limsa Lominsa",
+ "JapaneseName": "潮風の集う街"
+ },
+ {
+ "Type": "Item",
+ "IconId": 25945,
+ "EnglishName": "Navigator's Glory - The Theme of Limsa Lominsa Orchestrion Roll",
+ "FrenchName": "Rouleau “Navigator's Glory - The Theme of Limsa Lominsa”",
+ "GermanName": "Notenrolle von „Navigator's Glory - The Theme of Limsa Lominsa“",
+ "JapaneseName": "オーケストリオン譜:潮風の集う街"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Quest_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Quest_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..7dac8d4
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Quest_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,10 @@
+[
+ {
+ "Type": "Quest",
+ "IconId": 71221,
+ "EnglishName": " For Want of a Memory",
+ "FrenchName": " Une arme à mémoire d'éléphant",
+ "GermanName": " Erinnerungen an vergangene Tage",
+ "JapaneseName": " 「レジスタンス・ウェポン」への記憶定着"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Status_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Status_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..8f4ec74
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Status_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,66 @@
+[
+ {
+ "Type": "Status",
+ "IconId": 15020,
+ "EnglishName": "Vulnerability Up",
+ "FrenchName": "Vulnérabilité augmentée",
+ "GermanName": "Erhöhte Verwundbarkeit",
+ "JapaneseName": "被ダメージ上昇"
+ },
+ {
+ "Type": "Status",
+ "IconId": 17101,
+ "EnglishName": "Vulnerability Up",
+ "FrenchName": "Vulnérabilité augmentée",
+ "GermanName": "Erhöhte Verwundbarkeit",
+ "JapaneseName": "被ダメージ上昇"
+ },
+ {
+ "Type": "Status",
+ "IconId": 15057,
+ "EnglishName": "Magic Vulnerability Up",
+ "FrenchName": "Vulnérabilité magique augmentée",
+ "GermanName": "Erhöhte Magie-Verwundbarkeit",
+ "JapaneseName": "被魔法ダメージ増加"
+ },
+ {
+ "Type": "Status",
+ "IconId": 18021,
+ "EnglishName": "Magic Vulnerability Up",
+ "FrenchName": "Vulnérabilité magique augmentée",
+ "GermanName": "Erhöhte Magie-Verwundbarkeit",
+ "JapaneseName": "被魔法ダメージ増加"
+ },
+ {
+ "Type": "Status",
+ "IconId": 15057,
+ "EnglishName": "Magic Vulnerability Up",
+ "FrenchName": "Vulnérabilité magique augmentée",
+ "GermanName": "Erhöhte Magie-Verwundbarkeit",
+ "JapaneseName": "被魔法ダメージ上昇"
+ },
+ {
+ "Type": "Status",
+ "IconId": 15053,
+ "EnglishName": "Physical Vulnerability Up",
+ "FrenchName": "Vulnérabilité physique augmentée",
+ "GermanName": "Erhöhte physische Verwundbarkeit",
+ "JapaneseName": "被物理ダメージ増加"
+ },
+ {
+ "Type": "Status",
+ "IconId": 18001,
+ "EnglishName": "Physical Vulnerability Up",
+ "FrenchName": "Vulnérabilité physique augmentée",
+ "GermanName": "Erhöhte physische Verwundbarkeit",
+ "JapaneseName": "被物理ダメージ増加"
+ },
+ {
+ "Type": "Status",
+ "IconId": 15659,
+ "EnglishName": "Marked for Vulnerability Up",
+ "FrenchName": "Cible: Vulnérabilité physique augmentée",
+ "GermanName": "Erhöhte physische Verwundbarkeit",
+ "JapaneseName": "指定:被物理ダメージ増加"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Title_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Title_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..0fe8f4b
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Title_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,10 @@
+[
+ {
+ "Type": "Title",
+ "IconId": null,
+ "EnglishName": "God of Magic / Goddess of Magic",
+ "FrenchName": "Dieu de la magie / Déesse de la magie",
+ "GermanName": "Gott der Magie / Göttin der Magie",
+ "JapaneseName": "God of Magic"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Trait_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Trait_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..53329ac
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Trait_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,90 @@
+[
+ {
+ "Type": "Trait",
+ "IconId": 5185,
+ "EnglishName": "Maim and Mend",
+ "FrenchName": "Efficacité des actions augmentée",
+ "GermanName": "Verbesserte Kommandos",
+ "JapaneseName": "アクションダメージ・回復量アップ"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5185,
+ "EnglishName": "Maim and Mend",
+ "FrenchName": "Efficacité éthérée augmentée",
+ "GermanName": "Verbesserte Kommandos",
+ "JapaneseName": "アクションダメージ・回復量アップ"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6102,
+ "EnglishName": "Maim and Mend",
+ "FrenchName": "Efficacité des actions augmentée",
+ "GermanName": "Verbesserte Kommandos",
+ "JapaneseName": "アクションダメージ・回復量アップ"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5185,
+ "EnglishName": "Maim and Mend",
+ "FrenchName": "Efficacité des actions augmentée",
+ "GermanName": "Hauen und Heilen",
+ "JapaneseName": "アクションダメージ・回復量アップ"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5189,
+ "EnglishName": "Maim and Mend V",
+ "FrenchName": "Efficacité des actions augmentée V",
+ "GermanName": "Verbesserte Kommandos V",
+ "JapaneseName": "アクションダメージ・回復量アップV"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5186,
+ "EnglishName": "Maim and Mend II",
+ "FrenchName": "Efficacité des actions augmentée II",
+ "GermanName": "Verbesserte Kommandos II",
+ "JapaneseName": "アクションダメージ・回復量アップII"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5186,
+ "EnglishName": "Maim and Mend II",
+ "FrenchName": "Efficacité éthérée augmentée II",
+ "GermanName": "Verbesserte Kommandos II",
+ "JapaneseName": "アクションダメージ・回復量アップII"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 6103,
+ "EnglishName": "Maim and Mend II",
+ "FrenchName": "Efficacité des actions augmentée II",
+ "GermanName": "Verbesserte Kommandos II",
+ "JapaneseName": "アクションダメージ・回復量アップII"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5186,
+ "EnglishName": "Maim and Mend II",
+ "FrenchName": "Efficacité des actions augmentée II",
+ "GermanName": "Hauen und Heilen II",
+ "JapaneseName": "アクションダメージ・回復量アップII"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5188,
+ "EnglishName": "Maim and Mend IV",
+ "FrenchName": "Efficacité des actions augmentée IV",
+ "GermanName": "Verbesserte Kommandos IV",
+ "JapaneseName": "アクションダメージ・回復量アップIV"
+ },
+ {
+ "Type": "Trait",
+ "IconId": 5187,
+ "EnglishName": "Maim and Mend III",
+ "FrenchName": "Efficacité des actions augmentée III",
+ "GermanName": "Verbesserte Kommandos III",
+ "JapaneseName": "アクションダメージ・回復量アップIII"
+ }
+]
diff --git a/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Weather_SearchContentByName_ReturnsMatchingResults.snap b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Weather_SearchContentByName_ReturnsMatchingResults.snap
new file mode 100644
index 0000000..720ff8b
--- /dev/null
+++ b/EasyTranslate.Integration.Tests/__snapshots__/SearchContentByNameTest.Weather_SearchContentByName_ReturnsMatchingResults.snap
@@ -0,0 +1,10 @@
+[
+ {
+ "Type": "Weather",
+ "IconId": 60202,
+ "EnglishName": "Fair Skies",
+ "FrenchName": "Clair",
+ "GermanName": "Heiter",
+ "JapaneseName": "晴れ"
+ }
+]
diff --git a/EasyTranslate.sln b/EasyTranslate.sln
index 5e4f320..e78e5ce 100644
--- a/EasyTranslate.sln
+++ b/EasyTranslate.sln
@@ -19,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyTranslate.Domain.Tests"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyTranslate.Infrastructure.Tests", "EasyTranslate.Infrastructure.Tests\EasyTranslate.Infrastructure.Tests.csproj", "{C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyTranslate.Integration.Tests", "EasyTranslate.Integration.Tests\EasyTranslate.Integration.Tests.csproj", "{0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -61,6 +63,10 @@ Global
{C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}.Debug|x64.Build.0 = Debug|Any CPU
{C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}.Release|x64.ActiveCfg = Release|Any CPU
{C8BDAB83-0DA6-4DA0-9938-3F27D19A55D6}.Release|x64.Build.0 = Release|Any CPU
+ {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Debug|x64.Build.0 = Debug|Any CPU
+ {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Release|x64.ActiveCfg = Release|Any CPU
+ {0D330F6B-E1A6-4C77-AFA8-E4F34443EB7C}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE