2
0

StringTable.cs 5.6 KB

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