diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d16d594
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+/Data
+/Public/data
+__pycache__
+.sass-cache
+*.[Ss]ecret.*
+*.[Ss]ecrets.*
+*.deleted.*
+/CSharp/bin
+/CSharp/obj
+/SQLServer/data
+/SQLServer/scripts
+/SQLServer/temporary
\ No newline at end of file
diff --git a/AnPv2.sln.old b/AnPv2.sln.old
new file mode 100644
index 0000000..38626be
--- /dev/null
+++ b/AnPv2.sln.old
@@ -0,0 +1,29 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.2.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{B41BF331-FCCB-2ADF-CDB6-767964B34647}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnP", "CSharp\AnP.csproj", "{720E15E3-2F0D-4B91-98F1-400300826A0A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {720E15E3-2F0D-4B91-98F1-400300826A0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {720E15E3-2F0D-4B91-98F1-400300826A0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {720E15E3-2F0D-4B91-98F1-400300826A0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {720E15E3-2F0D-4B91-98F1-400300826A0A}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {720E15E3-2F0D-4B91-98F1-400300826A0A} = {B41BF331-FCCB-2ADF-CDB6-767964B34647}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {47442BB3-05F5-4AAF-A859-D456A81FC0A2}
+ EndGlobalSection
+EndGlobal
diff --git a/CSharp/AnP.csproj b/CSharp/AnP.csproj
new file mode 100755
index 0000000..41964d3
--- /dev/null
+++ b/CSharp/AnP.csproj
@@ -0,0 +1,23 @@
+
+
+ Exe
+ net10.0;net462
+ enable
+ enable
+ latest
+ AnP
+ AnP
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharp/AnP.slnx b/CSharp/AnP.slnx
new file mode 100755
index 0000000..939d01f
--- /dev/null
+++ b/CSharp/AnP.slnx
@@ -0,0 +1,3 @@
+
+
+
diff --git a/CSharp/Application/AnP.cs b/CSharp/Application/AnP.cs
new file mode 100755
index 0000000..3ccf424
--- /dev/null
+++ b/CSharp/Application/AnP.cs
@@ -0,0 +1,9 @@
+using AnP.Interfaces.Application;
+
+namespace AnP.Application{
+ class AnP:AnPInterface{
+
+ public AnP(object? inputs = null){}
+
+ }
+}
\ No newline at end of file
diff --git a/CSharp/Interfaces/Application/AnPInterface.cs b/CSharp/Interfaces/Application/AnPInterface.cs
new file mode 100644
index 0000000..962bd67
--- /dev/null
+++ b/CSharp/Interfaces/Application/AnPInterface.cs
@@ -0,0 +1,5 @@
+namespace AnP.Interfaces.Application{
+ public interface AnPInterface{
+
+ }
+}
\ No newline at end of file
diff --git a/CSharp/Interfaces/Managers/I18NManagerInterface.cs b/CSharp/Interfaces/Managers/I18NManagerInterface.cs
new file mode 100644
index 0000000..49193f4
--- /dev/null
+++ b/CSharp/Interfaces/Managers/I18NManagerInterface.cs
@@ -0,0 +1,14 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace AnP.Interface.Managers{
+
+ public interface I18NManagerInterface{
+
+ public string get(List strings, object? inputs = null, List? languages = null, int custom_options = 0);
+
+ public void add(object? items, int custom_options = 0);
+
+ }
+
+}
\ No newline at end of file
diff --git a/CSharp/Managers/I18NManager.cs b/CSharp/Managers/I18NManager.cs
new file mode 100644
index 0000000..0da2fc9
--- /dev/null
+++ b/CSharp/Managers/I18NManager.cs
@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+using AnP.Types;
+using AnP.Utils;
+using AnP.Interfaces.Application;
+
+namespace AnP.Managers{
+ public class I18NManager{
+
+ private static readonly Dictionary> DEFAULT_SENTENCES = new Dictionary>{
+ {"english", new Dictionary{
+ {"greeting", new I18NSentenceType.Text("Hello, World!")}
+ }}
+ };
+
+ private static readonly Options GET_OPTIONS = new Options();
+
+ public AnPInterface anp;
+ private Dictionary> sentences;
+ private string language;
+ private string default_language;
+
+ public I18NManager(AnPInterface anp){
+ this.anp = anp;
+ sentences = new Dictionary>(DEFAULT_SENTENCES);
+ language = default_language = "english";
+ }
+
+ public string get(object strings, object? inputs = null, object? languages = null, int custom_options = 0){
+
+ List keys = Common.get_keys(strings);
+ Options options = new Options(custom_options, GET_OPTIONS);
+
+ if(keys.Count != 0){
+
+ List languages_used = new List();
+
+ foreach(string language in Common.get_keys(languages).Concat(
+ new List{this.language, default_language}
+ ).Concat(sentences.Keys))
+ if(!languages_used.Contains(language)){
+ languages_used.Add(language);
+ if(sentences.ContainsKey(language))
+ foreach(string key in keys)
+ if(sentences[language].ContainsKey(key))
+ return sentences[language][key] switch{
+ I18NSentenceType.Text text => text.value,
+ I18NSentenceType.List list => string.Join("", list.value),
+ _ => ""
+ };
+ }
+ };
+ return Common.get_strings(strings).FirstOrDefault() ?? "";
+ }
+
+ public void add(object? items, int custom_options = 0){}
+
+ }
+}
\ No newline at end of file
diff --git a/CSharp/Managers/SettingsManager.cs b/CSharp/Managers/SettingsManager.cs
new file mode 100644
index 0000000..db628c2
--- /dev/null
+++ b/CSharp/Managers/SettingsManager.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+using AnP.Utils;
+using AnP.Interfaces.Application;
+
+namespace AnP.Managers{
+ public class SettingsManager{
+
+ public static readonly Dictionary DEFAULT_SETTINGS = new Dictionary{};
+ public static readonly Options GET_OPTIONS = new Options(Options.ALLOW_NULLS);
+ public static readonly Options ADD_OPTIONS = new Options(Options.NO_OVERWRITE);
+
+ public AnPInterface anp;
+ public Dictionary settings = new Dictionary(){};
+ public Dictionary secrets = new Dictionary(){};
+ public Dictionary inputs;
+
+ public SettingsManager(AnPInterface anp, object? inputs = null){
+ this.anp = anp;
+ this.inputs = Common.get_dictionary