Search Unity

I2 Localization ( The most complete Localization solution for Unity )

Discussion in 'Assets and Asset Store' started by Inter-Illusion, Feb 27, 2014.

  1. grimmy

    grimmy

    Joined:
    Feb 2, 2009
    Posts:
    409
    I know why this happened. I found the xml in staging area and it looks like this:


    <?xml version="1.0" encoding="utf-8"?>

    <resources>

    <string name="app_name">Mr Bomb & Friends</string>

    </resources>


    The problem is because the string ‘Mr Bomb & Friends’ has an un-escaped ‘&’ symbol…which is causing a malformed xml and therefore the build to fail.


    I have had this problem through i2Localization with some translations which I’ve rectified but I forgot that I modified the title and didn’t realise the strings xmls would pick this up. I’ve fixed it simply by changing the product name in the editor but hopefully you can fix this for others in future versions. Cheers
     
    Inter-Illusion likes this.
  2. MythicalCity

    MythicalCity

    Joined:
    Feb 10, 2011
    Posts:
    420
    I have my language settings set to "fallback" but for missing translations the ScriptLocalization.Get function returns an empty string. Shouldn't it return the term string that was entered into ScriptLocalization.Get ?
     
  3. MythicalCity

    MythicalCity

    Joined:
    Feb 10, 2011
    Posts:
    420
    Another question, is it okay to have multiple I2Languages prefabs in the project? for example if we have 2 versions of the game and need certain ones to load from a different language database?
     
  4. arlefreak

    arlefreak

    Joined:
    Nov 28, 2013
    Posts:
    6
    Hi I'm getting the following warning every time I press the play button

    Unable to load TMPro.TMP_FontAsset 'move'
    Unable to load UnityEngine.Material 'move'

    Is there any way to solve it ?
     
  5. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Code (csharp):
    1. Another question, is it okay to have multiple I2Languages prefabs in the project? for example if we have 2 versions of the game and need certain ones to load from a different language database?
    You can go two ways:
    1- Duplicate the I2Languages.prefab, (e.g. MyLanguages.prefab), then, open the LocalizationManager and add "MyLanguages" to the array GlobalSources.
    That will make I2Localization to load the MyLanguages prefab at startup and turn it into a Global Source that its accessible everywhere.

    2- Create a gameobject in one of your scenes, and add a LanguageSource component. As long as that scene is loaded, the languageSource terms will be accessible. So, if you have several versions of the game, just load the scene that matches that version.

    Definitively a bug (or well, a missing feature). Up to now, the Fallback options were only used by the Localize component. And then the Get(..) function were supposed to give you raw access to the localization.

    I have been modifying the way the Get(...) function works (to allow for also specifying the target language and other parameters). As part of this, I will see to add a variant of these functions that use the fallback options.
    Will let you know as soon as a beta with that is ready.

    What I'm guessing is happening there, is that you added a Term to localize the font (or automatically created them by Adding ALL). That term is been used as a Secondary Term in one of your Localize components.
    On startup, the localization runs, finds that Localize component, and tries loading the font specified in the SecondayTerm. But the 'move' font, was moved or no longer exists.

    The way to fix this, is by either setting the correct font in that Term, or deleting the term if the font shouldn't change based on the language.

    Hope that helps,
    Frank
     
  6. rsodre

    rsodre

    Joined:
    May 9, 2012
    Posts:
    229
    Hi!

    One of the features that I like the most in I2 is the google spreadsheet import.
    But it saves a cached copy in the device, and this copy is not encrypted.
    I have some localized information that I don't want players to see or alter, so that's a problem for me, because players can easily edit the table and hack the game.
    Could you please consider encrypting the local cached tables to avoid that?

    Thanks,
    Roger
     
  7. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    For most situations unencrypted localizations are fine, given that they are local to your device and only affect the game text, but if you are also using it to store extra data in disabled languages or similar setups, it could be an issue.

    I like that suggestion of encrypting the downloaded data, and its simple to add, so I created a task for it and will try releasing it with the next major release!
    https://trello.com/c/vCpMdGsY/22-encrypt-the-downloaded-spreadsheet

    Hope that helps,
    Frank
     
    rsodre likes this.
  8. MythicalCity

    MythicalCity

    Joined:
    Feb 10, 2011
    Posts:
    420
  9. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    The Parse "No Localized" tool will select any UI Text component in your scene that doesn't have a Localize component assigned.
    upload_2017-8-8_23-57-21.png

    If you click the button at the bottom, it will select the gameObjects in the hierarchy, then you can click "Add Component" and add a Localize component. Which will automatically infer the term from the Label's text and show them in the I2Languages.prefab.

    Is that what you was looking for? Are you using Unity UI or TextMeshPro.

    Also, you can optionally type filters for include & exclude. That allows you to discard some of the labels that you know you don't want to localize (e.g. score, time, etc)

    upload_2017-8-9_0-4-15.png
    On the other side, the tool PARSE, finds all labels that have a localize component, but the selected term is not found in any LanguageSource.

    This tool will also search your scripts and find terms used in:
    ScriptLocalization.Get("term")
    ScriptLocalization.GetTranslation("term");
    ScriptLocalization.TryGetTranslation("term"

    The found terms, will be shown in the LanguageSource term's list with a warning.

    Hope that helps,
    Frank
     
  10. MythicalCity

    MythicalCity

    Joined:
    Feb 10, 2011
    Posts:
    420
    Ok great thank you for your help. So just to confirm, the only way to use parse is either by having that code in scripts or having a Localize component on labels? Parse won't find uGUI text (or Textmesh pro) components without localize added yet?
     
  11. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    There are 2 tools to cover the two cases you mention:

    PARSE
    Will search for all Localize components in the Scene and find the ones were the Term is not in a LanguageSource. It will also update the counter for every term(number of times the term is used). Once the tool finishes, you can see the results in the Term's list. (counter and a warning for the term that are not missing)

    PARSE NO LOCALIZED
    Will find all uGUI text (or Textmesh pro, NGUI, etc) components without localize added. All found text objects will be selected in the hierarchy.
     
  12. MythicalCity

    MythicalCity

    Joined:
    Feb 10, 2011
    Posts:
    420
    Ok thank you. Would be cool if the Parse no localize option also was able to add the terms to the language source without having to add in the localize component first :) just a thought.
     
  13. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    I'm glad to let you know that all the saved data is now stored in an encrypted string!
    This change is in the 2.8.0a5 which should be available in the beta folder early next week!

    Example before and after:

    upload_2017-8-11_23-4-27.png

    Hope that helps
    Frank
     
    Thorny2000 likes this.
  14. rsodre

    rsodre

    Joined:
    May 9, 2012
    Posts:
    229
    That's awesome! Thanks!
     
    Thorny2000 likes this.
  15. Mirgan

    Mirgan

    Joined:
    Feb 2, 2016
    Posts:
    25
    Hi.
    After several updates, I still have problems with Android devices(
    After adding terms to the dictionary, i check mDictionary.Count in LanguageSource.GetTermData. If i run from Editor dictionary have 169 records (contains new terms). After that i click Build and Run on my Android device. And on Android device dictionary contains only 163 records (new terms not included).
    So i have question - how update terms on device? I know only one way - delete app and install again - thats work fine, but how about another users? Thay after every update need reinstall app?

    And second question - why I2 adding in terms font names? And I can not delete them=(
    https://gyazo.com/259839ba92420f3768e45a5aa9b83ed8

    P.S. i use free version TextMeshPro.

    Thank you in advance!
     
  16. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    The terms you are seeing with the yellow icon in front, are not actual terms. They are suggestions of terms that you may need to add in order to fully localize you app.
    That includes Labels that don't have a term selected as well as Fonts that haven't been localized. The fonts are handy as soon as you try to localize to Chinese and other big languages that you would need to set a separated font to avoid using too much memory.

    However, this is just a suggestion, if you don't want to see them, just click the "Missing" toggle at the top of the term's list. That will hide all of those. Just be sure from to time to check if you are missing something!

    My guess is that you are using Google Live Synchronization. (In the languageSource you set UpdateFrequency to anything other than NEVER).
    When that feature is enabled, the plugin automatically downloads the spreadsheet if it finds that it is newer than the version you have in your game.
    What I think is happening for you, is that you downloaded data from the spreadsheet into your editor, I2 Localization saved that spreadsheet version, and after that you modified the spreadsheet but didn't download it again.
    So, when you build and then run the game in the device, I2L finds that the version of the spreadsheet in google is newer than the version you have in your editor, and it downloads and uses that one (which doesn't include the term you added).

    Can you try, exporting to google from Unity, modify the spreadsheet to check that works, and then Import back to unity.
    After that you should be able to build your game, and in the device I2L will not download the spreadsheet because the one in unity matches the one in google.

    In general, remember that if you use the google live synchronization, all modifications in the editor needs to be exported to google, otherwise, the data you build in your apk is overridden with the one from google.

    Hope that helps,
    Frank
     
  17. Mirgan

    Mirgan

    Joined:
    Feb 2, 2016
    Posts:
    25
    Hi, Frank.
    Ok great thank you for your help. Now all works fine. Now i understand about google live synchronization.
     
    Inter-Illusion likes this.
  18. Mikea15

    Mikea15

    Joined:
    Sep 20, 2012
    Posts:
    93
    Hi @Inter-Illusion ,

    upon updating to the latest version of I2L, I have some weird behavior.
    Code (CSharp):
    1. string title = ScriptLocalization.Get("Detection/Found");
    2.         string name = ScriptLocalization.Get("Data/Name");
    3.         title = title.Replace("{NAME}", name);
    This worked fine, and now it doesn't.
    before update:
    _correct.PNG
    after the update.
    _error.PNG

    I know being in Arabic, even I can't make sense of these words.

    I'm using v2.6.11 f1

    On a separate bug.
    Whenever I start the game, the first time, some translations don't parse. If I delay or restart the game ( without closing the game ), translations are ok. Is there anything running in the background that prevents the correct translation?

    Thanks
     
  19. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    That looks weird indeed. I have been trying to reproduce that in my end without luck.
    When you said that you updated to the latest version of I2L, did you mean that you move from some version to 2.6.11 or that you moved from 2.6.11 to 2.7.0 (or even better 2.8.0b5)?

    Are those labels using a localized font?
    Does the translations look fine in the I2Languages.prefab or are they wrong in the inspector as well?
    Did you imported the term from a CSV file? (in case the encoding is not right anymore, using some other than UTF8)

    Do you have Google Live Synchronization enabled? If so, the game will automatically download any change to the spreadsheet and use that. So, the game will open with the old translation for a few seconds and then after the new data is downloaded, it will switch to the new translations.
    If that's the case, see the post above for a way to make sure your downloaded data is up-to-date.
     
  20. madmoredie

    madmoredie

    Joined:
    Jan 18, 2013
    Posts:
    7
    Hi,
    Translate All does not work, it just translate the latest languange input.
    I`m use 2.7.0 f1 version on Unity 2017.1.0f3
     
  21. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Yes, this was a regression that was fixed in v2.8.0b5. You can download that version from the beta folder.

    Hope that helps,
    Frank
     
  22. madmoredie

    madmoredie

    Joined:
    Jan 18, 2013
    Posts:
    7
    where I can find this beta folder?
     
  23. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
  24. 5argon

    5argon

    Joined:
    Jun 10, 2013
    Posts:
    1,555
    When localizing sprites, the common problem is that the sprite's height might not be the same. Just replacing the sprite would throw the layout off a bit. (For example, with text image on language with elements above or below the line height)





    Other than the naive solution of go edit all the sprites to have the same dimension (by appending empty transparent area), do you have any solution like dynamically adjusting the pivot point?
     
  25. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    When localizing sprites, you would normally keep the same dimensions and pivot, etc.
    However, when that's not desirable/possible, you can use callbacks to adjust any setting you need:
    http://inter-illusion.com/assets/I2LocalizationManual/Callbacks.html

    The basic idea is that instead of just setting the name of the sprite, you can encode the extra data:
    Term: "TERM_1"
    English: "SpriteNameEN?offset=-10,0"
    Spanish: "SpriteNameES?offset=-10,0"

    Then, create an script for the callback and setup that localize component to call the OnLocalizeCallback method (or however you prefer to call it.
    That method, should check for parameters in the MainTranslation string, remove and apply them. And finally, let MainTranslation with just the sprite name.

    for example:
    Code (csharp):
    1.  
    2. public void OnModifyLocalization()
    3. {
    4.     // if no MainTranslation then skip (most likely this localize component only changes the font)
    5.     if (string.IsNullOrEmpty(Localize.MainTranslation))
    6.         return;
    7.        
    8.     var text = Localize.MainTranslation;
    9.    
    10.     // see if there is a param
    11.     int index = text.IndexOf("&");
    12.     if (index>=0)
    13.     {
    14.         // extract the params
    15.         var paramsStr = text.SubString(index + 1);
    16.         var params = paramsStr.split(",=".ToCharArray());
    17.         ApplyParams(params);      
    18.        
    19.         // remove the parameters and keep only the sprite name
    20.         text = text.SubString(0, index);
    21.     }
    22.     Localize.MainTranslation = text;
    23. }
    24. void ApplyParams( string[] Params )
    25. {
    26.     if (Params[0]=="offset")
    27.     {
    28.         float x = float.parse(Params[1]);
    29.         float y = float.parse(Params[2]);
    30.        
    31.         // apply offset
    32.         Image = Localize.CurrentLocalizeComponent.GetComponent<Image>();
    33.         Image.pivot = new Vector2(0.5f+x, 0.5f+y);
    34.     }
    35. }
    36.  
    That way you can apply any parameter or even call other functions as needed.
    The function above is just a draft and I haven't test it, but should give you an idea on how to handle any parameter.

    Hope that helps,
    Frank
     
  26. 5argon

    5argon

    Joined:
    Jun 10, 2013
    Posts:
    1,555
    Thank you for the guidance. I made a component that can adjust RectTransform according to values that you can specify in the component just in case anyone want to use it. Scale is untested but probably works if you don't have any scaling animations on the image.

    Screenshot 2017-09-12 13.50.06.png

    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using I2.Loc;
    5.  
    6. [System.Serializable]
    7. public class LocalizeAdjustmentValue
    8. {
    9.     public string languageCode; //like "en"
    10.     public int x,y,w,h = 0; //adds to the inital anchoredPosition and sizeDelta
    11.     public Vector3 scale = Vector3.zero; //adds to the initial scale
    12. }
    13.  
    14. [RequireComponent(typeof(RectTransform))]
    15. public class LocalizeAdjustment : MonoBehaviour {
    16.  
    17.     public List<LocalizeAdjustmentValue> adjustmentValues;
    18.     private Vector2 initialAnchoredPosition;
    19.     private Vector2 initialSizeDelta;
    20.     private Vector3 initialScale;
    21.     private RectTransform rect;
    22.  
    23.     public void Awake()
    24.     {
    25.         rect = GetComponent<RectTransform>();
    26.         initialAnchoredPosition = rect.anchoredPosition;
    27.         initialSizeDelta = rect.sizeDelta;
    28.         initialScale = rect.localScale;
    29.     }
    30.  
    31.     public void Adjust()
    32.     {
    33.         LocalizeAdjustmentValue adjustmentValue = adjustmentValues.Find(value => value.languageCode == LocalizationManager.CurrentLanguageCode);
    34.  
    35.         if(adjustmentValue != null)
    36.         {
    37.             rect.anchoredPosition = initialAnchoredPosition + new Vector2(adjustmentValue.x,adjustmentValue.y);
    38.             rect.sizeDelta = initialSizeDelta + new Vector2(adjustmentValue.w,adjustmentValue.h);
    39.             rect.localScale = initialScale + adjustmentValue.scale;
    40.         }
    41.         else
    42.         {
    43.             rect.anchoredPosition = initialAnchoredPosition;
    44.             rect.sizeDelta = initialSizeDelta;
    45.             rect.localScale = initialScale;
    46.         }
    47.     }
    48.  
    49. }
    50.  
    Outside of play mode
    Screenshot 2017-09-12 13.56.05.png

    Inside play mode
    Screenshot 2017-09-12 13.55.53.png
     
  27. DeepShader

    DeepShader

    Joined:
    May 29, 2009
    Posts:
    682
    Hello, is it possible to use this Asset with NodeCanvas (for the Dialogue System)?
     
  28. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi
    Well, no out of the box, but its very easy to set it up.
    I don't have NodeCanvas, seems like a nice plugin so as soon as the next update is finished, I will check to add built-in support.

    Now, from what I see in the documentation, the dialog system, set the text directly to a UI label defined in its own DialogueUGUI prefab. To make this work with I2 Localization, you would need to a Localize component to each label in that prefab, and then replace the call
    label.text = ...dialog...
    into
    label.GetComponent<Localize>().SetTerm( dialog );

    Then, you just create a Term for each dialog, and you ready to go.
    Hope that helps,
    Frank
     
  29. zhuchun

    zhuchun

    Joined:
    Aug 11, 2012
    Posts:
    433
    I2L suddenly pops countless errors in my editor and prevent me from compiling today, what happens?
    Can be reproduced by import to a new project on my end. Upgraded to the latest version from Asset Store

    i2l_errors.png

    -------------
    UPDATE: Comment out line #107 temporarily gets me back to work
    //EditorApplication.update += CheckAnalyticsResult;
     
    Last edited: Sep 22, 2017
  30. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    I'm adding a proper fix to 2.8.0b7, but in the meantime, you can avoid this problem by adding
    return true;

    at line 60 of file Assets\I2\Common\Editor\I2Analytics.cs

    should look like this:
    Code (csharp):
    1.  
    2.            {
    3.                     if (!a.isDone)
    4.                         return false;
    5.  
    6.                     return true; //  add this line ----------
    7.  
    8.                     if (string.IsNullOrEmpty(a.error))
    9.                     {
    10.  
    Hope that helps,
    Frank
     
    zhuchun likes this.
  31. Alex3333

    Alex3333

    Joined:
    Dec 29, 2014
    Posts:
    342
    Good afternoon. in version 2017 there are a bunch of warnings. How to get rid of them?
     

    Attached Files:

    • 1с.jpg
      1с.jpg
      File size:
      423.7 KB
      Views:
      873
  32. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    Are you using the latest AssetStore version (2.7.0)? Those errors are fixed in that release.
    If you are using that version, and still getting issues, most likely there was an error when upgrading your copy. You could try deleting the I2 folder and install I2 localization again to be sure all files were updated correctly.

    Furthermore, if you have access to the beta, you could download 2.8.0, which includes several other 2017 fixes for .NET4.6 and lots of other improvements.
     
  33. Alex3333

    Alex3333

    Joined:
    Dec 29, 2014
    Posts:
    342
    how to access ?? Do you need to send an invitation to the post or what?
     
  34. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
  35. DeepShader

    DeepShader

    Joined:
    May 29, 2009
    Posts:
    682
    Hi Frank, no sorry, I don't know how to handle that. Where would I replace the call?
     
  36. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi, I'm not sure as that's inside the NodeCanvas code, and I don't have it yet.
    I'm planning on getting the asset once I finish this next update and see if I can add a proper integration, but without seeing the code I cant tell you where exactly to do it.
    Said that, you could try searching their code for ".text =", once of those will be the one that needs to be modified.
     
  37. DeepShader

    DeepShader

    Joined:
    May 29, 2009
    Posts:
    682
    Hopefully you can integrate it in your Asset soon ^^
     
  38. EDarkness

    EDarkness

    Joined:
    Feb 1, 2013
    Posts:
    506
    Hello. I'm using Unity 5.5.4 and I updated this asset a little while ago, but I'm getting the error:

    Assets/I2/ScriptLocalization.cs(8,70): error CS0117: `I2.Loc.LocalizationManager' does not contain a definition for `GetTermTranslation'

    Not sure what's causing it since I have everything installed, but the examples. I deleted the file and the error went away, but I'm not sure that was the best way to handle that situation.
     
  39. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    Sorry for this inconvenience, in the latest version (2.8.0), the GetTermTranslation was renamed into Get(xxx) to make it easier to use in your code and with better optional parameters. There is code to update the old script into the new ones, but it seems that it is not working in all situations.

    In those cases that failed (like in yours), the correct approach is to delete the ScriptLocalization.cs file and bake the terms again (if you baked some already).

    Hope that helps,
    Frank
     
  40. EDarkness

    EDarkness

    Joined:
    Feb 1, 2013
    Posts:
    506
    Thanks for the information. By deleting the file, how will this affect the use of the asset in general? I'll admit that I only started integrating it into my code, so I'm not totally familiar with it's inner workings so far.
     
  41. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    ScriptLocalization.cs is an auto-generated file, that is created when you use the Bake Terms tool
    Removing that file is totally fine and will not affect the plugin at all.

    Anyway, if you want to keep/add some of the terms as properties, you just need to open the bake tool again and click "Generate" to create the ScriptLocalization.cs file again!
     
  42. TailoraSAS

    TailoraSAS

    Joined:
    Jul 18, 2015
    Posts:
    5
    It seems that the fix for the mac retina display is not in the last version of I2Localisation. I had to add it manually after an update in LocalizationEditor_Terms_Description.cs.
     
  43. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    In the latest version, I removed the GUILayout.Width parameter from that function, as it was no longer needed.
    I'm not exactly sure if that's included in 2.8.0f1 or 2.8.1a1.

    Are you seeing issues in retina even with the new code?
    Code (csharp):
    1.  
    2.                     Translation = EditorGUILayout.TextArea(Translation, Style_WrapTextField);
    3.                     //Translation = EditorGUILayout.TextArea(Translation, Style_WrapTextField, GUILayout.Width(Screen.width - 260 - (autoTranslated ? 20 : 0)));
    4.  
     
  44. TailoraSAS

    TailoraSAS

    Joined:
    Jul 18, 2015
    Posts:
    5
    Ok, i think i am using the version 2.8.0f1 (i downloaded it from the assetstore). In unity, it's labelled as the version 2.8.0b6. In that version, there is still the GUILayout parameter.

    But you are right, without the GUILayout.width parameter, it's working fine. no need for EditorGUIUtility.pixelsPerPoint
     
  45. bz_apps

    bz_apps

    Joined:
    Aug 19, 2014
    Posts:
    72
    Hi @Inter-Illusion, how does the localization work with the ios app store? If someone downloads a french version and someone the english version, does i2 localization know which app store the app came from and load the appropriate language or do I have to rely on the user choosing a language inside the app?

    Can the localization be automatic based upon the app store?
     
  46. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    When you download the app (no matter from which store), and run the game, I2 Localization will detect the device language and pick the languages from your I2Languages.prefab that more closely matches the one of the device.
    If none is found, it will fallback to the first language in the list.

    Here is a better explanation:
    http://inter-illusion.com/assets/I2LocalizationManual/InitialLanguage.html

    This auto-detection can then be overridden inside the app, if the user changes the language manually.

    Hope that helps,
    Frank
     
    bz_apps likes this.
  47. tessellation

    tessellation

    Joined:
    Aug 11, 2015
    Posts:
    390
    In our game we've got it set for testing so that it shows MISSING TRANSLATION when there's no translation. Right now we only have English text. Recently on an Android device with the game installed for over a week, some of the text that uses I2 Loc terms started displaying MISSING TRANSLATION. The only way I could fix it was to completely UNINSTALL the app and reinstall it. Then the text was fine again. We're using 2.7.0 f1.

    My first thought is that perhaps the device tried to download the google docs spreadsheet and somehow got a corrupted file. I'm very concerned that this might happen to our players out in the wild. Is there a checksum or other validation done to ensure that this file is correctly installed?

    Thanks for the advice,
    -Stu
     
  48. Inter-Illusion

    Inter-Illusion

    Joined:
    Jan 5, 2014
    Posts:
    598
    Hi,
    What I think is happening is that you deployed the game, and then continued changing the same Spreadsheet (adding terms, removing them, etc).
    The game in the device detected the change and downloaded the new spreadsheet, but that version of the spreadsheet doesn't contain some of the term that were used at the time the game was deployed. That's why you are seeing Missing terms in that release.

    To avoid this issue, you should keep two spreadsheet (one for development and one for release). That way, everytime you make a new update and send it to the store, you copy the spreadsheet data from the development spreadsheet into the release one, and make the build use the release spreadsheet. That will allow you to continue developing without affecting players. And then, if you find a problem in the already release version and want to make a correction without having to redeploy, you can still fix it in the release spreadsheet.

    I'm planning on making this process automatic, check this:
    https://trello.com/c/bMMilaBG/18-release-and-development-spreadsheet

    Now that I'm about to release the full Plural support, that's whats next on the list!

    If the file is corrupted or not valid, then internally, the plugin will not be able to convert it from I2CSV into terms, and so, no data will be updated in the game. That rules out any issue with corruption.

    Also check the second approach described in this link for a common way of handling Google Live Synchronization:
    http://www.inter-illusion.com/forum/i2-localization/924-inconsistency-between-editor-and-device#2459

    Hope that helps,
    Frank
     
  49. tessellation

    tessellation

    Joined:
    Aug 11, 2015
    Posts:
    390
    Thanks very much for the reply. I've only seen this happen on Kindle Fire HD devices, not my other android devices or iPhone/iPad. It's strange because we haven't made any changes to the online Google spreadsheet since the builds were installed on those devices. Otherwise of course I would expect missing translations to be marked as missing. But this just isn't what's happening. The online spreadsheet still contains those translations and wasn't modified.

    That will be very nice to have built-in support for both Dev and Release spreadsheets for the auto-update. Looking forward to that and plurals!

    We just updated to 2.8.0 so I will let you know if it happens again, although I just set auto-update to Never, so I will have to turn it back on to see if I can reproduce it with the latest.
     
    Inter-Illusion likes this.
  50. Abhi6257

    Abhi6257

    Joined:
    May 14, 2017
    Posts:
    1
    i am not able to make ios build in unity 3d .plaes find attached file following errors are coming
     

    Attached Files: