Exemple #1
0
        protected virtual void UpdatePeer(Text peer, TranslatableText text)
        {
            var translator = Context?.Translator;
            var value      = translator == null ? text.Text : text.Translate(translator);

            peer.text = value;
        }
 public virtual void Reset(View view)
 {
     TranslatableText.Reset(view);
     Text.Reset(view);
     FontFamily.Reset(view);
     TextColor.Reset(view);
     PointSize.Reset(view);
     TextShadow.Reset(view);
 }
 public virtual void Reset(View view)
 {
     TranslatableText?.Reset(view);
     Text?.Reset(view);
     FontFamily?.Reset(view);
     TextColor?.Reset(view);
     PointSize?.Reset(view);
     PixelSize?.Reset(view);
     TextShadow?.Reset(view);
 }
        public TranslatableText GetTranslatableForLabel(TMP_Text label)
        {
            TranslatableText result = null;

            if (labelTextMap != null && labelTextMap.ContainsKey(label))
            {
                result = labelTextMap[label];
            }
            return(result);
        }
Exemple #5
0
        public DropdownItem(
            string key, TranslatableText label, Sprite image = null)
        {
            Assert.IsNotNull(key, "key != null");
            Assert.IsNotNull(label, "label != null");

            _key   = key;
            _label = label;
            _image = image;
        }
Exemple #6
0
 public void Reset(View view)
 {
     TranslatableText.Reset(view);
     Text.Reset(view);
     FontFamily.Reset(view);
     TextColor.Reset(view);
     PointSize.Reset(view);
     TranslatablePlaceholderText.Reset(view);
     PlaceholderTextColor.Reset(view);
     PrimaryCursorColor.Reset(view);
 }
 public void Reset(View view)
 {
     TranslatableText?.Reset(view);
     Text?.Reset(view);
     FontFamily?.Reset(view);
     TextColor?.Reset(view);
     PointSize?.Reset(view);
     PixelSize?.Reset(view);
     TranslatablePlaceholderText?.Reset(view);
     TranslatablePlaceholderTextFocused?.Reset(view);
     PlaceholderTextColor?.Reset(view);
     PrimaryCursorColor?.Reset(view);
 }
Exemple #8
0
        private void UpdatePlaceholder(TranslatableText text)
        {
            if (PeerPlaceholder == null)
            {
                return;
            }

            UpdatePeer(PeerPlaceholder, text);

            var empty = string.IsNullOrEmpty(text.Text) && string.IsNullOrEmpty(text.TextKey);

            PeerPlaceholder.gameObject.SetActive(!empty);
        }
        private TranslatableText FindByOriginalContent(string original)
        {
            TranslatableText result = null;

            foreach (TranslatableText item in translatablesDatabase.translatables)
            {
                if (original.Equals(item.Text) || (!caseSensitive && original.ToLowerInvariant().Equals(item.Text.ToLowerInvariant())))
                {
                    result = item;
                    break;
                }
            }
            return(result);
        }
Exemple #10
0
 public override int GetHashCode()
 {
     return(TranslatableText.GetHashCode());
 }
Exemple #11
0
        public UntranslatedText(string text, bool templatizeByNumbers, bool removeInternalWhitespace)
        {
            OriginalText = text;

            if (templatizeByNumbers)
            {
                TemplatedText = text.TemplatizeByNumbers();
                if (TemplatedText != null)
                {
                    text = TemplatedText.Template;
                }
            }

            int i = 0;
            int firstNonWhitespace = 0;
            int lastNonWhitespace  = 0;

            StringBuilder leadingBuilder = null;

            while (i < text.Length && char.IsWhiteSpace(text[i]))
            {
                if (leadingBuilder == null)
                {
                    leadingBuilder = new StringBuilder(64);
                }

                leadingBuilder.Append(text[i]);
                i++;
            }
            firstNonWhitespace = i;

            if (firstNonWhitespace != 0)
            {
                LeadingWhitespace = leadingBuilder?.ToString();
            }

            i = text.Length - 1;
            StringBuilder trailingBuilder = leadingBuilder;

            if (trailingBuilder != null)
            {
                trailingBuilder.Length = 0;
            }

            while (i > -1 && char.IsWhiteSpace(text[i]))
            {
                if (trailingBuilder == null)
                {
                    trailingBuilder = new StringBuilder(64);
                }

                trailingBuilder.Append(text[i]);
                i--;
            }
            lastNonWhitespace = i;

            if (lastNonWhitespace != text.Length - 1)
            {
                TrailingWhitespace = trailingBuilder?.Reverse().ToString();
            }

            // trim internals of 'text'
            if (removeInternalWhitespace && Settings.WhitespaceRemovalStrategy == WhitespaceHandlingStrategy.TrimPerNewline)
            {
                StringBuilder builder = trailingBuilder;
                if (builder != null)
                {
                    builder.Length = 0;
                }
                else if (builder == null)
                {
                    builder = new StringBuilder(64);
                }

                if (LeadingWhitespace != null)
                {
                    builder.Append(LeadingWhitespace);
                }

                int whitespaceStart = -1;
                for (i = firstNonWhitespace; i <= lastNonWhitespace; i++)
                {
                    var c = text[i];

                    if (c == '\n')
                    {
                        // find first non-whitespace
                        int u = i - 1;
                        while (u > firstNonWhitespace && char.IsWhiteSpace(text[u]))
                        {
                            u--;
                        }

                        int o = i + 1;
                        while (o < lastNonWhitespace && char.IsWhiteSpace(text[o]))
                        {
                            o++;
                        }

                        u++;
                        o--;
                        int  l             = o - u;
                        char lastCharAdded = default(char);
                        if (l > 0)
                        {
                            char currentWhitespaceChar  = text[u];
                            bool addedCurrentWhitespace = false;
                            u++;

                            for (int k = u; k <= o; k++)
                            {
                                var ch = text[k];

                                // keep repeating whitespace
                                if (ch == currentWhitespaceChar)
                                {
                                    if (!addedCurrentWhitespace)
                                    {
                                        builder.Append(currentWhitespaceChar);
                                        addedCurrentWhitespace = true;
                                    }

                                    builder.Append(ch);
                                    lastCharAdded = ch;
                                }
                                else
                                {
                                    addedCurrentWhitespace = false;
                                    currentWhitespaceChar  = ch;
                                }
                            }
                        }

                        // we know we have just handled a newline
                        // now we need to check if the last character added is a whitespace character
                        // if it is not, we should add a space
                        if (Settings.UsesWhitespaceBetweenWords)
                        {
                            if (!char.IsWhiteSpace(lastCharAdded))
                            {
                                if (builder.Length > 0 && builder[builder.Length - 1] != ' ')
                                {
                                    builder.Append(' ');
                                }
                            }
                        }

                        i = o;
                        whitespaceStart = -1;
                    }
                    else if (!char.IsWhiteSpace(c))
                    {
                        if (whitespaceStart != -1)
                        {
                            // add from whitespaceStart to i - 1 of characters
                            for (int b = whitespaceStart; b < i; b++)
                            {
                                builder.Append(text[b]);
                            }

                            whitespaceStart = -1;
                        }

                        builder.Append(c);
                    }
                    else
                    {
                        // is whitespace char different from \n
                        if (whitespaceStart == -1)
                        {
                            whitespaceStart = i;
                        }
                    }
                }

                if (TrailingWhitespace != null)
                {
                    builder.Append(TrailingWhitespace);
                }

                TranslatableText = builder.ToString();
            }
            else
            {
                TranslatableText = text;
            }

            int leadingWhitespaceCount  = LeadingWhitespace != null ? LeadingWhitespace.Length : 0;
            int trailingWhitespaceCount = TrailingWhitespace != null ? TrailingWhitespace.Length : 0;

            if (leadingWhitespaceCount > 0 || trailingWhitespaceCount > 0)
            {
                TrimmedTranslatableText = TranslatableText.Substring(leadingWhitespaceCount, TranslatableText.Length - trailingWhitespaceCount - leadingWhitespaceCount);
            }
            else
            {
                TrimmedTranslatableText = TranslatableText;
            }
        }
        public override void OnInspectorGUI()
        {
            if (database.translatables == null)
            {
                database.translatables = new List <TranslatableText>();
            }


            database.isTranslation = EditorGUILayout.ToggleLeft("is a Translation?", database.isTranslation, GUILayout.Width(180));

            if (database.isTranslation)
            {
                TranslatableTextDatabase auxDB = (TranslatableTextDatabase)EditorGUILayout.ObjectField("Original Database", database.original, typeof(TranslatableTextDatabase), false);
                if (auxDB != null && !auxDB.Equals(database))
                {
                    database.original = auxDB;
                }
            }

            if (database.isTranslation && (database.original == null || database.original.GetTexts() == null))
            {
                GUILayout.Label("You need to specify the original database for this translation and it must contain at least one item");
                return;
            }

            if (GUILayout.Button("Add New", GUILayout.Width(80)))
            {
                database.translatables.Add(new TranslatableText());
            }

            for (int i = 0; i < database.translatables.Count; i++)
            {
                TranslatableText item = database.translatables[i];
                EditorGUILayout.LabelField(new GUIContent("Translation Key: " + item.translationKey, "Internal key used to match the original with the translations"));
                if (database.isTranslation)
                {
                    EditorGUILayout.LabelField("Original Translation Key: " + ((item.original != null)?item.original.translationKey:""));
                    EditorGUILayout.BeginHorizontal();
                    GUILayout.Label("Original", GUILayout.Width(50));
                    int selected = database.original.GetIndexByTranslationKey(item.translationKey) + 1;

                    string[] displayOpts = PrependOption("<None>", database.original.GetTexts());
                    selected = EditorGUILayout.IntPopup(selected, displayOpts, GetIndexes(displayOpts.Length), GUILayout.Width(100));
                    if (selected > 0)
                    {
                        item.original       = database.original.translatables[selected - 1];
                        item.translationKey = item.original.translationKey;
                    }
                    EditorGUILayout.EndHorizontal();
                }
                if (string.IsNullOrEmpty(item.translationKey) && !database.isTranslation)
                {
                    item.translationKey = "text-" + ShortGuid.NewGuid();
                }
                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("Text", GUILayout.Width(50));
                item.Text = EditorGUILayout.TextField(item.Text, GUILayout.Width(300));
                bool removed = false;
                if (GUILayout.Button("X", GUILayout.Width(20)))
                {
                    database.translatables.RemoveAt(i);
                    removed = true;
                }
                EditorGUILayout.EndHorizontal();
                if (!removed)
                {
                    database.translatables[i] = item;
                }
            }

            EditorUtility.SetDirty(database);
        }
        private void OnWizardCreate()
        {
            if (translatablesDatabase == null)
            {
                EditorUtility.DisplayDialog("Error", "You need to select the translatables database", "OK");
                return;
            }
            if (translatablesDatabase.isTranslation && translatablesDatabase.original != null)
            {
                // Instead of the original database, a translation was chosen, but we can set it to the right one.
                translatablesDatabase = translatablesDatabase.original;
            }
            TranslatableTextDatabase databaseToSave = null;
            string path = EditorUtility.OpenFilePanelWithFilters("Open label translation file", "", new string[] { "Text file", "txt" });

            if (path.Length != 0)
            {
                using (StreamReader reader = new StreamReader(path))
                {
                    databaseToSave               = CreateInstance <TranslatableTextDatabase>();
                    databaseToSave.original      = translatablesDatabase;
                    databaseToSave.isTranslation = true;
                    databaseToSave.translatables = new List <TranslatableText>();
                    Regex regex     = new Regex(@"^(.+?)(?: *):(?: *)(.*)$");
                    int   lineCount = 0;
                    while (!reader.EndOfStream)
                    {
                        string line = reader.ReadLine();
                        lineCount++;
                        // Ignore comments and empty lines
                        if (line.StartsWith("//") || line.Trim().Length == 0)
                        {
                            continue;
                        }
                        if (regex.IsMatch(line))
                        {
                            Match            m = regex.Match(line);
                            string           originalContent = m.Groups[1].Value;
                            TranslatableText originalText    = FindByOriginalContent(originalContent);
                            if (originalText == null)
                            {
                                EditorUtility.DisplayDialog("Error", "The original text for a label couldn't be found. Aborting", "OK");
                                return;
                            }
                            string           translation    = m.Groups[2].Value;
                            TranslatableText translatedText = new TranslatableText();
                            translatedText.original       = originalText;
                            translatedText.translationKey = originalText.translationKey;
                            translatedText.Text           = translation;
                            databaseToSave.translatables.Add(translatedText);
                        }
                        else
                        {
                            Debug.LogWarningFormat("LabelTranslationImporter: The line number {0} doesn't matches the format", lineCount);
                        }
                    }
                }
            }
            else
            {
                Debug.LogWarning("LabelTranslationImporter: No input file selected. Process aborted");
                return;
            }
            if (databaseToSave != null)
            {
                string baseFolder      = "Resources/" + localeSettings.baseFolder + "/" + locale.langCode + "/Texts";
                string targetDirectory = CreateIntermediateFolders(baseFolder);
                AssetDatabase.CreateAsset(databaseToSave, targetDirectory + "/TranslatablesDatabase.asset");
                AssetDatabase.SaveAssets();
            }
        }