LocalizedSprite.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { _decorator, Component, error } from "cc";
  2. import { EventName } from "../EventName";
  3. import { eventsOnLoad, preloadEvent } from "../Events";
  4. import ResSprite from "../ResSprite";
  5. import I18n, { CountryType } from "./I18n";
  6. const { ccclass, menu, requireComponent } = _decorator;
  7. @ccclass
  8. @eventsOnLoad()
  9. @requireComponent(ResSprite)
  10. @menu("Framework/I18N/LocalizedSprite")
  11. export default class LocalizedSprite extends Component {
  12. private _sprite: ResSprite = null;
  13. private _imageKey: string = "";
  14. /** 图片名 */
  15. public get imageKey(): string { return this._imageKey; }
  16. public set imageKey(v: string) {
  17. if (this._imageKey === v) {
  18. return;
  19. }
  20. this._imageKey = v;
  21. this.updateSprite();
  22. }
  23. protected onLoad(): void {
  24. try {
  25. I18n.init();
  26. this._sprite = this.getComponent(ResSprite);
  27. if (this._sprite.spriteFrame) {
  28. this.imageKey = this._sprite.spriteFrame.name;
  29. }
  30. } catch (err) {
  31. error(err);
  32. }
  33. }
  34. @preloadEvent(EventName.UPDATE_LOCALIZED_CMPT)
  35. public updateSprite(): void {
  36. if (!this.imageKey) {
  37. return;
  38. }
  39. let url = "";
  40. switch (I18n.curCountry) {
  41. case CountryType.ZH:
  42. url = "texture/localizedImage/zh/";
  43. break;
  44. case CountryType.JP:
  45. url = "texture/localizedImage/jp/";
  46. break;
  47. case CountryType.DE:
  48. url = "texture/localizedImage/de/";
  49. break;
  50. case CountryType.FR:
  51. url = "texture/localizedImage/de/";
  52. break;
  53. case CountryType.KR:
  54. url = "texture/localizedImage/kr/";
  55. break;
  56. case CountryType.GB:
  57. url = "texture/localizedImage/gb/";
  58. break;
  59. case CountryType.US:
  60. url = "texture/localizedImage/us/";
  61. break;
  62. case CountryType.CA:
  63. url = "texture/localizedImage/us/";
  64. break;
  65. case CountryType.AU:
  66. url = "texture/localizedImage/us/";
  67. break;
  68. default:
  69. return;
  70. }
  71. url += this.imageKey;
  72. this._sprite.setSpriteFrame(url + "/spriteFrame");
  73. }
  74. }