StringTable.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System;
  4. using System.Runtime.CompilerServices;
  5. namespace BansheeEngine
  6. {
  7. /** @addtogroup GUI-Engine
  8. * @{
  9. */
  10. /// <summary>
  11. /// Used for string localization. Stores strings and their translations in various languages.
  12. /// </summary>
  13. public sealed class StringTable : Resource
  14. {
  15. /// <summary>
  16. /// Constructor for runtime use only.
  17. /// </summary>
  18. /// <param name="dummy">Dummy parameter to differentiate from the normal constructor.</param>
  19. private StringTable(bool dummy)
  20. { }
  21. /// <summary>
  22. /// Creates a new empty string table.
  23. /// </summary>
  24. public StringTable()
  25. {
  26. Internal_CreateInstance(this);
  27. }
  28. /// <summary>
  29. /// Returns the total number of strings in the table.
  30. /// </summary>
  31. public int StringCount
  32. {
  33. get { return Internal_GetNumStrings(mCachedPtr); }
  34. }
  35. /// <summary>
  36. /// Returns all identifiers that the string table contains localized strings for.
  37. /// </summary>
  38. public string[] Identifiers
  39. {
  40. get { return Internal_GetIdentifiers(mCachedPtr); }
  41. }
  42. /// <summary>
  43. /// Checks does the string table contain the provided identifier.
  44. /// </summary>
  45. /// <param name="identifier">Identifier to look for.</param>
  46. /// <returns>True if the identifier exists in the table, false otherwise.</returns>
  47. public bool Contains(string identifier)
  48. {
  49. return Internal_Contains(mCachedPtr, identifier);
  50. }
  51. /// <summary>
  52. /// Adds or modifies string translation for the specified language.
  53. /// </summary>
  54. /// <param name="identifier">Identifier of the string to add/modify.</param>
  55. /// <param name="language">Language to add/modify the translation for.</param>
  56. /// <param name="value">Translated string in the specified language.</param>
  57. public void SetString(string identifier, Language language, string value)
  58. {
  59. Internal_SetString(mCachedPtr, identifier, language, value);
  60. }
  61. /// <summary>
  62. /// Adds or modifies string translation for the currently active language.
  63. /// </summary>
  64. /// <param name="identifier">Identifier of the string to add/modify.</param>
  65. /// <param name="value">Translated string in the active language.</param>
  66. public void SetString(string identifier, string value)
  67. {
  68. Internal_SetStringDefault(mCachedPtr, identifier, value);
  69. }
  70. /// <summary>
  71. /// Removes the string described by identifier, from all languages.
  72. /// </summary>
  73. /// <param name="identifier">Identifier of the string to remove.</param>
  74. public void RemoveString(string identifier)
  75. {
  76. Internal_RemoveString(mCachedPtr, identifier);
  77. }
  78. /// <summary>
  79. /// Returns a string translation for the specified language.
  80. /// </summary>
  81. /// <param name="identifier">Identifier of the string to look up.</param>
  82. /// <param name="language">Language to retrieve the translation for.</param>
  83. /// <returns>String translation for the specified language. Returns the identifier itself if one doesn't exist.
  84. /// </returns>
  85. public string GetString(string identifier, Language language)
  86. {
  87. string value;
  88. Internal_GetString(mCachedPtr, identifier, language, out value);
  89. return value;
  90. }
  91. /// <summary>
  92. /// Returns a string translation for the currently active language.
  93. /// </summary>
  94. /// <param name="identifier">Identifier of the string to look up.</param>
  95. /// <returns>String translation for the active language. Returns the identifier itself if one doesn't exist.
  96. /// </returns>
  97. public string GetString(string identifier)
  98. {
  99. string value;
  100. Internal_GetStringDefault(mCachedPtr, identifier, out value);
  101. return value;
  102. }
  103. [MethodImpl(MethodImplOptions.InternalCall)]
  104. private static extern void Internal_CreateInstance(StringTable instance);
  105. [MethodImpl(MethodImplOptions.InternalCall)]
  106. private static extern bool Internal_Contains(IntPtr thisPtr, string identifier);
  107. [MethodImpl(MethodImplOptions.InternalCall)]
  108. private static extern int Internal_GetNumStrings(IntPtr thisPtr);
  109. [MethodImpl(MethodImplOptions.InternalCall)]
  110. private static extern string[] Internal_GetIdentifiers(IntPtr thisPtr);
  111. [MethodImpl(MethodImplOptions.InternalCall)]
  112. private static extern void Internal_SetString(IntPtr thisPtr, string identifier, Language language, string value);
  113. [MethodImpl(MethodImplOptions.InternalCall)]
  114. private static extern void Internal_SetStringDefault(IntPtr thisPtr, string identifier, string value);
  115. [MethodImpl(MethodImplOptions.InternalCall)]
  116. private static extern void Internal_RemoveString(IntPtr thisPtr, string identifier);
  117. [MethodImpl(MethodImplOptions.InternalCall)]
  118. private static extern void Internal_GetString(IntPtr thisPtr, string identifier, Language language, out string value);
  119. [MethodImpl(MethodImplOptions.InternalCall)]
  120. private static extern void Internal_GetStringDefault(IntPtr thisPtr, string identifier, out string value);
  121. }
  122. /** @} */
  123. }