[Tizen] Add translatable text in TextLabel, TextField, TextEditor 09/144109/1
authorminho.sun <minho.sun@samsung.com>
Mon, 14 Aug 2017 11:06:51 +0000 (20:06 +0900)
committerminho.sun <minho.sun@samsung.com>
Mon, 14 Aug 2017 11:06:51 +0000 (20:06 +0900)
This reverts commit ab8259460b5a98b71659d44a83c0c994050203ff.

Conflicts:
Tizen.NUI/Tizen.NUI.csproj

Change-Id: Icc5d921e66e4009b5f76ae718f0ee5e02abbe191

Tizen.NUI/Tizen.NUI.csproj
Tizen.NUI/src/internal/WeakEventHandler.cs [new file with mode: 0755]
Tizen.NUI/src/public/BaseComponents/TextEditor.cs
Tizen.NUI/src/public/BaseComponents/TextField.cs
Tizen.NUI/src/public/BaseComponents/TextLabel.cs
Tizen.NUI/src/public/NUIApplication.cs
packaging/csapi-nui.spec

index 5d1c7b0..eb039ad 100755 (executable)
   <ItemGroup>\r
     <PackageReference Include="System.Reflection.TypeExtensions" Version="4.3.0" PrivateAssets="All" />\r
     <PackageReference Include="Tizen.Applications.Common" Version="1.5.9" />\r
+    <PackageReference Include="Tizen.System.SystemSettings" Version="1.0.4" PrivateAssets="All"/>\r
   </ItemGroup>\r
-\r
+  <Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">\r
+    <ItemGroup>\r
+      <ReferencePath Condition="'%(FileName)' == 'Tizen.System.SystemSettings'">\r
+        <Aliases>TizenSystemSettings</Aliases>\r
+      </ReferencePath>\r
+    </ItemGroup>\r
+  </Target>\r
 </Project>\r
 \r
diff --git a/Tizen.NUI/src/internal/WeakEventHandler.cs b/Tizen.NUI/src/internal/WeakEventHandler.cs
new file mode 100755 (executable)
index 0000000..b78ee88
--- /dev/null
@@ -0,0 +1,32 @@
+using System;\r
+using System.Reflection;\r
+\r
+namespace Tizen.NUI\r
+{\r
+    internal sealed class WeakEventHandler<TEventArgs> where TEventArgs : EventArgs\r
+    {\r
+        private readonly WeakReference _targetReference;\r
+        private readonly MethodInfo _method;\r
+\r
+        public WeakEventHandler(EventHandler<TEventArgs> callback)\r
+        {\r
+            _method = callback.GetMethodInfo();           \r
+            _targetReference = new WeakReference(callback.Target, true);\r
+        }\r
+\r
+        public void Handler(object sender, TEventArgs e)\r
+        {\r
+            var target = _targetReference.Target;\r
+            if (target != null)\r
+            {\r
+                var callback = (Action<object, TEventArgs>)_method.CreateDelegate(typeof(Action<object, TEventArgs>), target);\r
+                if (callback != null)\r
+                {\r
+                    callback(sender, e);\r
+                }\r
+            }\r
+        }\r
+}\r
+\r
+}\r
+\r
index 9f3e819..eaff977 100755 (executable)
 *
 */
 
+extern alias TizenSystemSettings;
+using TizenSystemSettings.Tizen.System;
 namespace Tizen.NUI.BaseComponents
 {
 
     using System;
     using System.Runtime.InteropServices;
+    using System.Globalization;
 
     /// <summary>
     /// A control which provides a multi-line editable text editor.
@@ -26,6 +29,9 @@ namespace Tizen.NUI.BaseComponents
     public class TextEditor : View
     {
         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        private string textEditorTextSid = null;
+        private string textEditorPlaceHolderTextSid = null;
+        private bool systemlangTextFlag = false;
 
         internal TextEditor(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.TextEditor_SWIGUpcast(cPtr), cMemoryOwn)
         {
@@ -347,6 +353,81 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
+        /// TranslatableText property.<br>
+        /// The text can be set SID value.<br>
+        /// </summary>
+        /// <exception cref='ArgumentNullException'>
+        /// ResourceManager about multilingual is null
+        /// </exception>
+        public string TranslatableText
+        {
+            get
+            {
+                return textEditorTextSid;
+            }
+            set
+            {
+                if (NUIApplication.MultilingualResourceManager == null)
+                {
+                    throw new ArgumentNullException("ResourceManager about multilingual is null");
+                }
+                textEditorTextSid = value;
+                Text = SetTranslatable(textEditorTextSid);
+            }
+        }
+        /// <summary>
+        /// TranslatablePlaceholderText property.<br>
+        /// The text can be set SID value.<br>
+        /// </summary>
+        /// <exception cref='ArgumentNullException'>
+        /// ResourceManager about multilingual is null
+        /// </exception>
+        public string TranslatablePlaceholderText
+        {
+            get
+            {
+                return textEditorPlaceHolderTextSid;
+            }
+            set
+            {
+                if (NUIApplication.MultilingualResourceManager == null)
+                {
+                    throw new ArgumentNullException("ResourceManager about multilingual is null");
+                }
+                textEditorPlaceHolderTextSid = value;
+                PlaceholderText = SetTranslatable(textEditorPlaceHolderTextSid);
+            }
+        }
+        private string SetTranslatable(string textEditorSid)
+        {
+            string translatableText = null;
+            translatableText = NUIApplication.MultilingualResourceManager?.GetString(textEditorSid, new CultureInfo(SystemSettings.LocaleLanguage.Replace("_", "-")));
+            if (translatableText != null)
+            {
+                if (systemlangTextFlag == false)
+                {
+                    SystemSettings.LocaleLanguageChanged += new WeakEventHandler<LocaleLanguageChangedEventArgs>(SystemSettings_LocaleLanguageChanged).Handler;
+                    systemlangTextFlag = true;
+                }
+                return translatableText;
+            }
+            else
+            {
+                translatableText = "";
+                return translatableText;
+            }
+        }
+        private void SystemSettings_LocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs e)
+        {
+            if (textEditorTextSid != null)
+            {
+                Text = NUIApplication.MultilingualResourceManager?.GetString(textEditorTextSid, new CultureInfo(e.Value.Replace("_", "-")));
+            }
+            if (textEditorPlaceHolderTextSid != null)
+            {
+                PlaceholderText = NUIApplication.MultilingualResourceManager?.GetString(textEditorPlaceHolderTextSid, new CultureInfo(e.Value.Replace("_", "-")));
+            }
+        }
         /// Text property.
         /// </summary>
         public string Text
index 6d0d4fa..09dc7d7 100755 (executable)
 * limitations under the License.
 *
 */
-
+extern alias TizenSystemSettings;
+using TizenSystemSettings.Tizen.System;
 namespace Tizen.NUI.BaseComponents
 {
 
     using System;
     using System.Runtime.InteropServices;
-
+    using System.Globalization;
     /// <summary>
     /// A control which provides a single-line editable text field.
     /// </summary>
     public class TextField : View
     {
         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        private string textFieldTextSid = null;
+        private string textFieldPlaceHolderTextSid = null;
+        private bool systemlangTextFlag = false;
 
         internal TextField(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.TextField_SWIGUpcast(cPtr), cMemoryOwn)
         {
@@ -339,6 +343,81 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
+        /// TranslatableText property.<br>
+        /// The text can be set SID value.<br>
+        /// </summary>
+        /// <exception cref='ArgumentNullException'>
+        /// ResourceManager about multilingual is null
+        /// </exception>
+        public string TranslatableText
+        {
+            get
+            {
+                return textFieldTextSid;
+            }
+            set
+            {
+                if (NUIApplication.MultilingualResourceManager == null)
+                {
+                    throw new ArgumentNullException("ResourceManager about multilingual is null");
+                }
+                textFieldTextSid = value;
+                Text = SetTranslatable(textFieldTextSid);
+            }
+        }
+        /// <summary>
+        /// TranslatablePlaceholderText property.<br>
+        /// The text can be set SID value.<br>
+        /// </summary>
+        /// <exception cref='ArgumentNullException'>
+        /// ResourceManager about multilingual is null
+        /// </exception>
+        public string TranslatablePlaceholderText
+        {
+            get
+            {
+                return textFieldPlaceHolderTextSid;
+            }
+            set
+            {
+                if (NUIApplication.MultilingualResourceManager == null)
+                {
+                    throw new ArgumentNullException("ResourceManager about multilingual is null");
+                }
+                textFieldPlaceHolderTextSid = value;
+                PlaceholderText = SetTranslatable(textFieldPlaceHolderTextSid);
+            }
+        }
+        private string SetTranslatable(string textFieldSid)
+        {
+            string translatableText = null;
+            translatableText = NUIApplication.MultilingualResourceManager?.GetString(textFieldSid, new CultureInfo(SystemSettings.LocaleLanguage.Replace("_", "-")));
+            if (translatableText != null)
+            {
+                if (systemlangTextFlag == false)
+                {
+                    SystemSettings.LocaleLanguageChanged += new WeakEventHandler<LocaleLanguageChangedEventArgs>(SystemSettings_LocaleLanguageChanged).Handler;
+                    systemlangTextFlag = true;
+                }
+                return translatableText;
+            }
+            else
+            {
+                translatableText = "";
+                return translatableText;
+            }
+        }
+        private void SystemSettings_LocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs e)
+        {
+            if (textFieldTextSid != null)
+            {
+                Text = NUIApplication.MultilingualResourceManager?.GetString(textFieldTextSid, new CultureInfo(e.Value.Replace("_", "-")));
+            }
+            if (textFieldPlaceHolderTextSid != null)
+            {
+                PlaceholderText = NUIApplication.MultilingualResourceManager?.GetString(textFieldPlaceHolderTextSid, new CultureInfo(e.Value.Replace("_", "-")));
+            }
+        }
         /// Text property.
         /// </summary>
         public string Text
index d505da0..5d52eac 100755 (executable)
 *
 */
 
+extern alias TizenSystemSettings;
+using TizenSystemSettings.Tizen.System;
 using System;
-
+using System.Globalization;
 namespace Tizen.NUI.BaseComponents
 {
 
@@ -26,7 +28,8 @@ namespace Tizen.NUI.BaseComponents
     public class TextLabel : View
     {
         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
-
+        private string textLabelSid = null;
+        private bool systemlangTextFlag = false;
         internal TextLabel(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.TextLabel_SWIGUpcast(cPtr), cMemoryOwn)
         {
             swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
@@ -147,6 +150,47 @@ namespace Tizen.NUI.BaseComponents
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             return ret;
         }
+        /// <summary>
+        /// TranslatableText property.<br>
+        /// The text can be set SID value.<br>
+        /// </summary>
+        /// <exception cref='ArgumentNullException'>
+        /// ResourceManager about multilingual is null
+        /// </exception>
+        public string TranslatableText
+        {
+            get
+            {
+                return textLabelSid;
+            }
+            set
+            {
+                if (NUIApplication.MultilingualResourceManager == null)
+                {
+                    throw new ArgumentNullException("ResourceManager about multilingual is null");
+                }
+                string translatableText = null;
+                textLabelSid = value;
+                translatableText = NUIApplication.MultilingualResourceManager?.GetString(textLabelSid, new CultureInfo(SystemSettings.LocaleLanguage.Replace("_", "-")));
+                if (translatableText != null)
+                {
+                    Text = translatableText;
+                    if (systemlangTextFlag == false)
+                    {
+                        SystemSettings.LocaleLanguageChanged += new WeakEventHandler<LocaleLanguageChangedEventArgs>(SystemSettings_LocaleLanguageChanged).Handler;
+                        systemlangTextFlag = true;
+                    }
+                }
+                else
+                {
+                    Text = "";
+                }      
+            }
+        }
+        private void SystemSettings_LocaleLanguageChanged(object sender, LocaleLanguageChangedEventArgs e)
+        {
+            Text = NUIApplication.MultilingualResourceManager?.GetString(textLabelSid, new CultureInfo(e.Value.Replace("_", "-")));
+        }
 
         /// <summary>
         /// Text property.<br>
index b5bdacb..1caf135 100755 (executable)
@@ -27,7 +27,11 @@ namespace Tizen.NUI
     /// Represents an application that have UI screen. The NUIApplication class has a default stage.
     /// </summary>
     public class NUIApplication : CoreApplication
-    {
+    {\r
+        /// <summary>
+        /// The instance of ResourceManager.
+        /// </summary>
+        private static System.Resources.ResourceManager resourceManager = null;
         /// <summary>
         /// The default constructor.
         /// </summary>
@@ -175,6 +179,7 @@ namespace Tizen.NUI
             Opaque = 0,
             Transparent = 1
         }
+<<<<<<< HEAD
 
 
         internal Application ApplicationHandle
@@ -185,5 +190,21 @@ namespace Tizen.NUI
             }
         }
 
+=======
+        /// <summary>
+        /// ResourceManager to handle multilingual
+        /// </summary>
+        public static System.Resources.ResourceManager MultilingualResourceManager
+        {
+            get
+            {
+                return resourceManager;
+            }
+            set
+            {
+                resourceManager = value;
+            }
+        }
+>>>>>>> 23f9e83... Add translatable text in TextLabel, TextField, TextEditor
     }
 }
index ae85cbd..87a3cf6 100755 (executable)
@@ -18,6 +18,7 @@ BuildRequires: dotnet-build-tools
 BuildRequires: csapi-tizen-nuget
 BuildRequires: csapi-application-common-nuget
 BuildRequires: csapi-application-ui-nuget
+BuildRequires: csapi-system-settings-nuget
 
 %define Assemblies Tizen.NUI