StringTable.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. /// Adds or modifies string translation for the specified language.
  42. /// </summary>
  43. /// <param name="identifier">Identifier of the string to add/modify.</param>
  44. /// <param name="language">Language to add/modify the translation for.</param>
  45. /// <param name="value">Translated string in the specified language.</param>
  46. public void SetString(string identifier, Language language, string value)
  47. {
  48. Internal_SetString(mCachedPtr, identifier, language, value);
  49. }
  50. /// <summary>
  51. /// Adds or modifies string translation for the currently active language.
  52. /// </summary>
  53. /// <param name="identifier">Identifier of the string to add/modify.</param>
  54. /// <param name="value">Translated string in the active language.</param>
  55. public void SetString(string identifier, string value)
  56. {
  57. Internal_SetStringDefault(mCachedPtr, identifier, value);
  58. }
  59. /// <summary>
  60. /// Removes the string described by identifier, from all languages.
  61. /// </summary>
  62. /// <param name="identifier">Identifier of the string to remove.</param>
  63. public void RemoveString(string identifier)
  64. {
  65. Internal_RemoveString(mCachedPtr, identifier);
  66. }
  67. /// <summary>
  68. /// Returns a string translation for the specified language.
  69. /// </summary>
  70. /// <param name="identifier">Identifier of the string to look up.</param>
  71. /// <param name="language">Language to retrieve the translation for.</param>
  72. /// <returns>String translation for the specified language. Returns the identifier itself if one doesn't exist.
  73. /// </returns>
  74. public string GetString(string identifier, Language language)
  75. {
  76. string value;
  77. Internal_GetString(mCachedPtr, identifier, language, out value);
  78. return value;
  79. }
  80. /// <summary>
  81. /// Returns a string translation for the currently active language.
  82. /// </summary>
  83. /// <param name="identifier">Identifier of the string to look up.</param>
  84. /// <returns>String translation for the active language. Returns the identifier itself if one doesn't exist.
  85. /// </returns>
  86. public string GetString(string identifier)
  87. {
  88. string value;
  89. Internal_GetStringDefault(mCachedPtr, identifier, out value);
  90. return value;
  91. }
  92. [MethodImpl(MethodImplOptions.InternalCall)]
  93. private static extern void Internal_CreateInstance(StringTable instance);
  94. [MethodImpl(MethodImplOptions.InternalCall)]
  95. private static extern int Internal_GetNumStrings(IntPtr thisPtr);
  96. [MethodImpl(MethodImplOptions.InternalCall)]
  97. private static extern string[] Internal_GetIdentifiers(IntPtr thisPtr);
  98. [MethodImpl(MethodImplOptions.InternalCall)]
  99. private static extern void Internal_SetString(IntPtr thisPtr, string identifier, Language language, string value);
  100. [MethodImpl(MethodImplOptions.InternalCall)]
  101. private static extern void Internal_SetStringDefault(IntPtr thisPtr, string identifier, string value);
  102. [MethodImpl(MethodImplOptions.InternalCall)]
  103. private static extern void Internal_RemoveString(IntPtr thisPtr, string identifier);
  104. [MethodImpl(MethodImplOptions.InternalCall)]
  105. private static extern void Internal_GetString(IntPtr thisPtr, string identifier, Language language, out string value);
  106. [MethodImpl(MethodImplOptions.InternalCall)]
  107. private static extern void Internal_GetStringDefault(IntPtr thisPtr, string identifier, out string value);
  108. }
  109. }